0

*somethingのような検索が大量の CPU を消費することに気付きました。私はwhoosh 2.4.1を使用しています。これは、この検索ケースをカバーするインデックスがないためだと思います。something*正常に動作します。*somethingしません。

これらのクエリにどのように対処しますか? この種のクエリを可能にするスキーマを宣言する特別な方法はありますか?

ありがとう!

4

1 に答える 1

2

これは非常に根本的な問題です。プレフィックスは通常(foo *を検索する場合のように)簡単に見つけることができますが、ポストフィックスは(* fooのように)簡単に見つけることができません。

プレフィックス+ワイルドカード検索は、最初に高速プレフィックス検索を実行し、次に最初のステップで指定された結果に対して低速ワイルドカード検索を実行するように最適化されます。

Wildcard+Postfixではその最適化を行うことはできません。しかし、トリックがあります:

本当に頻繁に必要な場合は、逆文字列のインデックスを作成して(逆検索文字列も検索して)、接尾辞検索が接頭辞検索になります。

どういうわけか:

add_document(title=title, title_rev=title[::-1])
...
# then query = u"*foo"[::-1], search in title_rev field.
于 2013-02-24T13:01:44.650 に答える