2014-04-26 164 views
0

我試圖使用Neo4J的Lucene全文索引設置自動導航/自動完成搜索功能。我希望我的搜索具有模糊性。 這是我的代碼。Neo4j Lucene索引 - 使用通配符執行模糊搜索

Index<Node> ind = db.index().forNodes("node_auto_index", 
    MapUtil.stringMap(IndexManager.PROVIDER, "lucene", "type", "fulltext")) ; 
for (Node node : ind.query("name:" + searchTerm.replace(" ", "?") + "~")) { 
    ... 
} 

在searchTerm中存在空格字符時會出現問題。 Lucene將該空間視爲下一個字段的開始並引發錯誤。我想出了空間字符可以被替換使用?通配符。但如果我這樣做,我不會從lucene獲得任何匹配。圍繞這個問題的工作是什麼?

此外,我想知道,如果它可以組合* &〜因爲我想要的結果開始的話是類型,而〜運營商尋找的項目的出現在字符串的任何地方

回答

1

確保你用雙引號將搜索詞封裝起來。這是n-gram的lucene需求。這是因爲他們的語法保留了使用空格的關鍵字。

Index<Node> ind = db.index().forNodes("node_auto_index", 
    MapUtil.stringMap(IndexManager.PROVIDER, "lucene", "type", "fulltext")) ; 
for (Node node : ind.query("name:" + ("\"" + searchTerm + "\"") + "~")) { 
    ... 
} 

http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Fields

http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Proximity%20Searches

+0

然後有幾個選項。我建議不要使用Neo4j進行自動完成。相反,您應該使用您熟悉的文件存儲格式創建JSON映射。查看我的關於使用Neo4j構建預測性自動填充的示例 - https://github.com/kbastani/predictive-autocomplete –