whoosh 2.x发行说明

Whoosh2.7

  • 删除了磁盘上单词图的拼写检查实现,有利于在术语文件上实现更简单、更快的fsa。

  • 许多错误修复。

  • 删除了与2.5之前版本创建的索引的向后兼容性。如果使用未更新的旧索引,则可能需要重新索引。

  • 这是在进行大检修之前的最后一个2.x版本,这将破坏向后兼容性。

Whoosh2.5

  • whoosh 2.5将读取现有的索引,但2.5创建的段将无法被较旧版本的whoosh读取。

  • 作为字段缓存的替代品,whoosh现在支持添加 sortable=True 字段的关键字参数。这使得whoosh以“column”格式(将“key”值与每个文档关联)存储字段值的可排序表示。这比以前的行为更健壮、更高效、更可定制。您现在应该指定 sortable=True 用于排序或分组搜索结果的字段。

    (您仍然可以对没有的字段进行排序/分组 sortable=True 但是,它将使用更多的RAM,并且随着whoosh在内存中缓存字段值而变慢。)

    使用的字段 sortable=True 可以避免指定 stored=True . 该字段的值仍将在上可用 Hit 对象(将从列而不是从存储字段中检索值)。对于某些类型的值,这实际上可能更快。

  • 现在,whoosh将检测常见类型的或查询,并使用优化的预读匹配器将它们加速几次。

  • 现在,whoosh包含了Snowball stemmers的纯Python实现,以及各种语言的停止词列表,这些语言都是从nltk改编而来的。这些可以通过 whoosh.analysis.LanguageAnalyzer 分析仪或通过 lang= 关键字参数 TEXT 字段。

  • 您现在可以使用 whoosh.filedb.filestore.Storage.create()whoosh.filedb.filestore.Storage.destory() 方法作为一致的API来设置和删除不同类型的存储。

  • 许多错误修复和速度改进。

  • 要使用的切换单元测试 py.test 而不是 nose .

  • 已删除已过时 SpellChecker 班级。

Whoosh2.4

  • 默认情况下,whoosh现在在提交时将段的单个文件组装成单个文件。这有一个小的性能损失,但解决了一个问题,即whoosh可以保持太多的文件打开。whoosh现在也更聪明地使用mmap。

  • 增加了索引和搜索分层文档的功能。见 索引和搜索文档层次结构 .

  • Rewrote the Directed Acyclic Word Graph implementation (used in spell checking) to be faster and more space-efficient. Word graph files created by previous versions will be ignored, meaning that spell checking may become slower unless/until you replace the old segments (for example, by optimizing).

  • 重新编写多处理索引,以便更快、更简单。你现在可以做 myindex.writer(procs=n) to get a multiprocessing writer, or myindex.writer(procs=n, multisegment=True) 要得到一个多处理的编写器,它会留下多个段,如旧的多段编写器。( MultiSegmentWriter 仍然可以作为返回新类的函数使用。)

  • 创建时 Term 查询特殊字段(例如数字或布尔值)的对象,现在可以使用字段的文本类型而不是字符串作为第二个参数,例如 Term("num", 20)Term("bool", True) . (此更改可能导致与期望查询对象为纯文本的函数交互时出现问题,例如拼写检查。)

  • 所有对磁盘索引的写入和读取现在都是通过“codec”对象完成的。这种体系结构应该使添加可选或实验特性变得更容易,并保持向后兼容性。

  • 解决问题75、35 35、35 35 35 35 35 35 35 35 35 35 35 错误。多亏了托马斯·瓦尔德曼和亚历克赛·古塞夫的帮助!

Whoosh 2.3.2

  • 修正了BM25F评分函数中的错误,提高了搜索结果的精度。

  • 修复问题203、205、206、208、209、212。

Whoosh 2.3.1

  • 修复问题200。

Whoosh2.3

  • 增加了一个 whoosh.query.Regex 术语查询类型,类似于 whoosh.query.Wildcard . 默认情况下,分析器不允许Regex术语查询。您需要添加 whoosh.qparser.RegexPlugin 插件。添加插件后,可以使用 r"expression" 正则表达式术语查询的查询语法。例如, r"foo.*bar" .

  • 增加了 whoosh.qparser.PseudoFieldPlugin 解析器插件。这个插件允许您创建“伪字段”,在用户应用该字段的任何查询语法上运行转换函数。这是一个相当高级的功能;我正在设法让它的功能更容易访问。

  • 字典中列表中的文档由返回 Results.groups() 默认情况下,现在与结果的相对顺序相同。例如,这使得在每个类别中显示“前n个”结果更容易。

  • 这个 groupids 关键字参数 Searcher.search 已删除。现在你可以通过 whoosh.sorting.FacetMap 对象到 Searcher.search 方法的 maptype 用于控制分面文档如何分组的参数,和/或设置 maptype 关于个人的论点 whoosh.sorting.FacetType 对象以设置每个方面的自定义分组。见 :doc:../facets` 更多信息。

  • 调用 Searcher.documents()Searcher.document_numbers() 如果没有参数,则生成所有文档/数字。

  • 调用 Writer.update_document() with no unique fields is now equivalent to calling Writer.add_document() 用同样的论据。

  • 修复了关键字扩展的问题,其中代码构建的缓存在小索引上速度很快,但在大索引上速度却不可接受。

  • 添加了连字符( - )到与“通配符”标记匹配的字符列表中,以使解析更具可预测性。真正的修复程序必须等待另一个解析器重写。

  • 固定未使用的 __future__ import和使用 float("nan") 它在python 2.5下崩溃了。

  • 修正了一个错误,其中向量场只有一个术语存储了一个空的术语向量。

  • 其他各种错误修复。

Whoosh2.2

  • 修复了几个错误,包括BM25F评分中的一个错误。

  • 补充 allow_overlap 选择权 whoosh.sorting.StoredFieldFacet .

  • add_document() ,现在可以为布尔和日期时间字段(例如 boolfield="true"dtfield="20101131-16:01" )作为实际情况的替代方案 booldatetime 物体。这个实现是不完整的:它只在默认情况下工作 filedb 后端,如果存储字段,则存储的值将是字符串,而不是解析的对象。

  • 补充 whoosh.analysis.CompoundWordFilterwhoosh.analysis.TeeFilter .

Whoosh2.1

此版本修复了几个错误,并包含了要突出显示的速度改进。见 如何创建突出显示的搜索结果摘要 更多信息。

Whoosh2

改进

  • whoosh现在与python 3兼容(用python 3.2测试)。特别要感谢维尼·萨吉普,以及帮助解决后来问题的乔丹·谢勒。

  • 排序和分组(分面)现在使用“分面”对象的新系统,该系统比以前的基于字段的系统灵活得多。

    例如,按名字排序,然后按分数排序:

    from whoosh import sorting
    
    mf = sorting.MultiFacet([sorting.FieldFacet("firstname"),
                             sorting.ScoreFacet()])
    results = searcher.search(myquery, sortedby=mf)
    

    除了先前支持的按字段内容和/或查询结果排序/分组之外,现在还可以使用数字范围、日期范围、分数等。新的刻面系统还支持重叠组。

    (旧的“排序器”API仍然有效,但已弃用,在将来的版本中可能会被删除。)

    排序和分面 更多信息。

  • 完全修改了拼写检查,使其更快、更容易和更灵活。您可以使用 spelling=True 字段类型的参数:

    schema = fields.Schema(text=fields.TEXT(spelling=True))
    

    (拼写建议方法将在没有 spelling=True 但速度会变慢。)在添加新文档时,拼写图将自动更新——不再需要维护单独的“拼写索引”。

    您可以使用 whoosh.searching.Searcher.suggest() ::

    suglist = searcher.suggest("content", "werd", limit=3)
    

    现在,whoosh包含了拼写检查和更正用户查询的方便方法,还可以使用 whoosh.highlight 模块:

    from whoosh import highlight, qparser
    
    # User query string
    qstring = request.get("q")
    
    # Parse into query object
    parser = qparser.QueryParser("content", myindex.schema)
    qobject = parser.parse(qstring)
    
    results = searcher.search(qobject)
    
    if not results:
      correction = searcher.correct_query(gobject, gstring)
      # correction.query = corrected query object
      # correction.string = corrected query string
    
      # Format the corrected query string with HTML highlighting
      cstring = correction.format_string(highlight.HtmlFormatter())
    

    拼写建议可以来自字段内容和/或单词列表。对于词干字段,拼写建议自动使用单词的非词干形式。

    有一些用于拼写建议和查询更正的API,因此高度活跃的用户可以用更复杂的行为(例如,考虑上下文)代替默认值。

    “你是说……?“更正用户查询中的错误” 更多信息。

  • whoosh.query.FuzzyTerm 现在也使用了新的单词图表功能,因此速度更快。

  • 现在,您可以在索引单个文档时为其设置一个增强因子,以增加搜索中这些文档中的术语得分。参见文档了解 add_document() 更多信息。

  • 增加了哪些术语与哪些文档匹配的内置记录。使用 terms=True 参数 whoosh.searching.Searcher.search() 使用 whoosh.searching.Hit.matched_terms()whoosh.searching.Hit.contains_term() 检查匹配的条款。

  • whoosh现在支持整个术语的质量优化,例如,如果系统知道一个unionmatcher不可能贡献“前n个”结果,除非两个子匹配,它将用一个intersectionmatcher替换unionmatcher,后者计算速度更快。性能改进不如块质量优化显著,但可以注意到。

  • 修复了一个错误,该错误阻止了不在索引中的单词查询中的块质量优化,这可能严重降低性能。

  • 块质量优化现在使用实际的评分算法来计算块质量,而不是近似值,它修复了搜索结果的排序可能不同的问题,无论有没有优化。

  • 布尔字段类型现在支持字段提升。

  • 重新构造了查询分析器,使代码更容易理解。以前版本的自定义解析器插件可能会在whoosh 2.0中中断。

  • 各种错误修复和性能改进。

  • 移除了“读锁”,这导致了比它解决的问题更多的问题。现在,当打开读卡器时,如果段在打开时从读卡器下被删除,代码只会重试。

兼容性

  • 术语“质量优化”要求更改磁盘格式。如果向后兼容旧格式,则会发出 Whoosh 2.0。在使用whoosh 2.0重写索引时,默认情况下,它将为新段使用新格式,使索引与旧版本不兼容。

    要升级现有索引以立即使用新格式,请使用 Index.optimize() .

  • 删除了实验 TermTrackingCollector 因为它被新的内置术语记录功能所取代。

  • 删除了实验 Searcher.define_facets 功能,直到将来的版本,它将被一个更强大和有用的功能所取代。

  • 读卡器迭代方法( __iter__iter_fromiter_field 等等)现在生成 whoosh.reading.TermInfo 物体。

  • 类:`whoosh.query.FuzzyTerm`的参数已更改