我正在尝试使用 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 得到任何匹配。解决这个问题的方法是什么?
另外,我想知道是否可以组合 * 和 ~,因为我希望结果以键入的单词开头,而 ~ 运算符会查找字符串中任何位置出现的术语
最佳答案
确保将搜索词括在双引号中。这是 lucene 对 n-gram 的要求。这是因为它们的语法保留了使用空格的关键字。
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
关于java - Neo4j Lucene索引-使用通配符执行模糊搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305878/