飞快移动 - 通配符搜索的性能问题(*某事)

时间:2013-01-13 21:26:00

标签: python full-text-search whoosh

我注意到像*something这样的搜索消耗了大量的cpu。我正在使用whoosh 2.4.1。我想这是因为我没有覆盖此搜索案例的索引。 something*工作正常。 *something没有。

您如何处理这些疑问?是否有一种特殊的方式来声明您的模式,使这种查询成为可能?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个非常基本的问题:前缀通常很容易找到(比如搜索foo *时),后缀不是(比如* foo)。

前缀+通配符搜索得到优化,首先执行快速前缀搜索,然后对第一步中给出的结果进行慢速通配符搜索。

您不能使用Wildcard + Postfix进行优化。但有一个诀窍:

如果您确实经常需要,可以尝试索引反向字符串(并搜索反向搜索字符串),因此后缀搜索会成为前缀搜索:

不知何故喜欢:

add_document(title=title, title_rev=title[::-1])
...
# then query = u"*foo"[::-1], search in title_rev field.