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
班级。
myindex.writer(procs=n)
to get a multiprocessing writer, or myindex.writer(procs=n, multisegment=True)
要得到一个多处理的编写器,它会留下多个段,如旧的多段编写器。( MultiSegmentWriter
仍然可以作为返回新类的函数使用。)Term
查询特殊字段(例如数字或布尔值)的对象,现在可以使用字段的文本类型而不是字符串作为第二个参数,例如 Term("num", 20)
或 Term("bool", True)
. (此更改可能导致与期望查询对象为纯文本的函数交互时出现问题,例如拼写检查。)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下崩溃了。allow_overlap
选择权 whoosh.sorting.StoredFieldFacet
.add_document()
,现在可以为布尔和日期时间字段(例如 boolfield="true"
和 dtfield="20101131-16:01"
)作为实际情况的替代方案 bool
或 datetime
物体。这个实现是不完整的:它只在默认情况下工作 filedb
后端,如果存储字段,则存储的值将是字符串,而不是解析的对象。whoosh.analysis.CompoundWordFilter
和 whoosh.analysis.TeeFilter
.此版本修复了几个错误,并包含了要突出显示的速度改进。见 如何创建突出显示的搜索结果摘要 更多信息。
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`的参数已更改