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, ormyindex.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 callingWriter.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"
)作为实际情况的替代方案bool
或datetime
物体。这个实现是不完整的:它只在默认情况下工作filedb
后端,如果存储字段,则存储的值将是字符串,而不是解析的对象。补充
whoosh.analysis.CompoundWordFilter
和whoosh.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_from
,iter_field
等等)现在生成whoosh.reading.TermInfo
物体。类:`whoosh.query.FuzzyTerm`的参数已更改