0

Task: search for best matching results for a name-search with wildcard inside a db with ~40Million names. e.g. query='John' results might be 'John', 'Johnny', 'Smith John', 'ajohn'
Candidates: MySQL Full-text, Sphinx and Lucene.
Observation: I assume they all work with an inverted index, which might not be the best solution for such short "documents" (names), and a trie might be a lot more suitable.

Assuming this observation is correct, do these tools have configurations to be more suitable for my case? Are there other tools that can integrate easily in PHP?

Thanks.

4

1 に答える 1

2

私はスフィンクスについてしか話せません。特にワイルドカード検索を有効にする「min_prefix_len」があります。

2つのモードがあり、

1) 単語の各接頭辞は別々に保存されるため (たとえば、Johnny は Johnny、Johnn、John、Joh、Jo、J と一緒に保存されます)、それぞれが一致します。非常に高速なルックアップですが、インデックス サイズとインデックス作成速度が犠牲になります。

2) 生の単語が実際に保存され、接頭辞がこれらと照合されます。はるかにコンパクトなインデックスと高速なインデックス作成。しかし、検索速度はそれほど良くありません (sphinx は、単語リストをトライに格納するなどの最適化をまだ実装していません。したがって、専用のソリューションは、このモードで sphinx よりも優れたパフォーマンスを発揮する可能性があります。

モード 1 では、sphinx が友好的にタスクを実行し、mysql よりも優れていることをお勧めします。(ただし、Lucene との比較はわかりません)

于 2012-09-03T11:20:27.557 に答える