我想在數十億字符串中進行常規子字符串搜索。這個要求與一般的全文搜索有點不同,因爲我想要一個查詢「ubst」也可以打到「substr」。爲子串搜索建立一個索引?
Lucene或Sphinx能做到這一點嗎?如果沒有,你認爲這樣做的最好方法是什麼?
我想在數十億字符串中進行常規子字符串搜索。這個要求與一般的全文搜索有點不同,因爲我想要一個查詢「ubst」也可以打到「substr」。爲子串搜索建立一個索引?
Lucene或Sphinx能做到這一點嗎?如果沒有,你認爲這樣做的最好方法是什麼?
Lucene是最好的選擇之一。 Lucene支持子字符串搜索,所以ubst將返回substr。
查看http://wiki.apache.org/lucene-java/LuceneImplementations以獲取合適的語言實現。
這種情況下的最佳索引結構是suffix tree Lucene沒有實現這種類型的索引,所以它的子串搜索很慢。但lucene具有前綴樹索引,這意味着如果通過前綴搜索術語,則可以進行快速搜索。
謝謝。我自己構建了一個後綴數組。 –
Sphinx支持自2011年2月22日版本2.0.1-beta以來的有效子字符串搜索。不幸的是截至今天,該支持僅關注測試版本,如here所述。
我試了一下2.1.1測試版。它似乎工作正常。請參見manual entry獲取字典類型,閱讀關於keywords
類型。
當我試圖用2.0.6發行版,它回落至低效CRC指數,給索引期間以下警告:
WARNING: min_infix_len is not supported yet with dict=keywords; using dict=crc
我最小的配置文件:
謝謝,但似乎Lucene沒有索引。 –