2012-09-02 33 views
0

任務:搜索名稱搜索的最佳匹配結果,使用帶有~40Million名稱的db中的通配符搜索。例如查詢='約翰'的結果可能是'John','Johnny','Smith John','ajohn'
候選人:MySQL全文,獅身人面像和Lucene。
觀察:我假設他們都使用倒排索引,這可能不是這樣短的「文檔」(名稱)的最佳解決方案,並且trie可能更適合。創建最適合通配符搜索的索引,通過4000萬個名稱

假設這個觀察是正確的,這些工具的配置是否更適合我的情況?是否有其他可以輕鬆集成到PHP中的工具?

謝謝。

回答

2

我真的只能說獅身人面像。它確實有一個'min_prefix_len',它專門啓用通配符搜索。

它有兩種模式,

1)單獨存儲(例如約翰尼存儲與約翰尼,Johnn,約翰,荷蘭Joh,喬,J字的每個前綴),以便每個將匹配。非常快速的查找,但是以索引大小和索引速度爲代價。

2)的原始字被actully存儲,並且前綴匹配針對這些。更緊湊的索引和快速索引。但是搜索速度不是很好(獅身人面像還沒有實現優化 - 例如在trie中存儲單詞列表,所以一個專門的解決方案可能會勝過獅身人面像,在這種模式下。

建議模式1,sphinx將執行您的(但不知道它是如何與Lucene相比的)

+0

你說'比mysql好',好多少?我假設構建索引會使INSERTS工作變慢,與全文相比有多大mysql索引?而SELECTS將會增加x倍? – Noam