Neo4j Lucene索引 - 使用通配符执行模糊搜索

时间:2014-04-26 02:20:05

标签: java search autocomplete lucene neo4j

我正在尝试使用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得到任何比赛。围绕这个问题的工作是什么?

另外我想知道它是否可以结合*&amp; 〜因为我希望结果以单词类型开头,而〜运算符在字符串中的任何地方查找该单词的出现

1 个答案:

答案 0 :(得分: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