2013-03-11 45 views
1

我有一系列包含暱稱(即使有空格)和ID的文檔。Lucene和暱稱匹配

暱稱可以像[「example」,「nick n4me」,「nosp4ces」,「花哨的男人」]。

我必須找到一個查詢,它允許我通過完美匹配,模糊或具有部分字符的事件來查找配置文件。

所以,如果寫下「暱稱」或「暱稱」或「暱稱」,文件「暱稱」一直出來。

我試過的東西,如:

nickname:(%1%^4 %1%~^3 %1%*^1) 

其中「%1%」,也就是我在尋找,但它不能正常工作,尤其是對空格或數字暱稱。例如,如果我嘗試搜索「尼克N」的查詢是:

nickname:(nick n^4 nick n~^3 nick n*^1) 

回答

0

^推進只會影響得分和不匹配,也就是說,如果您的查詢不匹配可言,助推條款或不會有任何區別。

在您的具體示例中,查詢不匹配的原因是:

1)nick n將不匹配,因爲這將需要要麼token nickn已經被符號化;

2)編輯:我發現模糊查詢只適用於單一條款,如果您使用標準查詢解析器。在你的情況下,你可能應該使用ComplexPhraseQueryParser來重寫nick n~,所以你可以對整個PhraseQuery做一個模糊查詢。此外,您可以爲模糊查詢指定閾值(技術上,您指定的是最小Levenshtein距離)。顯然你必須調整閾值,而這通常需要一些試驗和錯誤。

0

更簡單的策略是將所有暱稱加載到一個字段中 - 在您的示例中,您的暱稱字段將包含4個值。如果您想在您的暱稱中使用嵌入空格,則需要使用比StandardAnalyzer更簡單的分析器或使用短語搜索。