数十億の文字列から一般的な部分文字列検索を行いたい。「ubst」というクエリでも「substr」にヒットできるようにしたいので、一般的な全文検索とは少し要件が異なります。
Lucene または Sphinx はこれを行うことができますか? そうでない場合、これを行うための最良の方法は何だと思いますか?
数十億の文字列から一般的な部分文字列検索を行いたい。「ubst」というクエリでも「substr」にヒットできるようにしたいので、一般的な全文検索とは少し要件が異なります。
Lucene または Sphinx はこれを行うことができますか? そうでない場合、これを行うための最良の方法は何だと思いますか?
この場合の最適なインデックス構造はサフィックス ツリーです 。Lucene はこのタイプのインデックスを実装していないため、部分文字列の検索が遅くなります。しかし、lucene にはプレフィックス ツリー インデックスがあり、プレフィックスで用語を検索すると高速に検索できます。
Sphinxは、2011 年 4 月 22 日のバージョン 2.0.1-beta 以降、効果的な部分文字列検索をサポートしています。
2.1.1ベータ版でやってみました。正しく動作しているようです。辞書の型についてはマニュアルのエントリを参照し、型について読んでくださいkeywords
。
2.0.6 リリース バージョンを使用しようとすると、非効率的な crc インデックスにフォールバックし、インデックス作成中に次の警告が表示されました。
WARNING: min_infix_len is not supported yet with dict=keywords; using dict=crc
私の最小限の構成ファイル:
source sour
{
type = xmlpipe2
xmlpipe_command = type C:\Temp\1\sphinx\input.xml
}
index inde
{
source = sour
path = testpa
enable_star = 1
dict = keywords
charset_type = utf-8
min_infix_len = 1
}
Lucene は、利用可能な最良のオプションの 1 つです。Lucene は部分文字列検索をサポートしているため、ubst は substr を返します。
適切な言語実装については、http://wiki.apache.org/lucene-java/LuceneImplementationsを参照してください。