我正在尝试使用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; 〜因为我希望结果以单词类型开头,而〜运算符在字符串中的任何地方查找该单词的出现
答案 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