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

标签 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 得到任何匹配。解决这个问题的方法是什么?

另外,我想知道是否可以组合 * 和 ~,因为我希望结果以键入的单词开头,而 ~ 运算符会查找字符串中任何位置出现的术语

最佳答案

确保将搜索词括在双引号中。这是 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/

相关文章:

Wordpress,替换标准词/搜索

android - 在自动完成 fragment 中设置当前位置

php - 使用 DOJO 自动完成文本框

java - 如何将 HashMap 设为 "search"然后循环结果?

java - sun-jaxws.xml 中的 JAX-WS 多端点

java - 使用 aop.xml 在 AspectJ 中编织加载时间

windows - 在 Windows 中使用特定文件扩展名查找文件中的单词

java - 由于没有 @Subcribe 方法,Android EventBus 应用程序在 Release模式下崩溃

search - Vim:如何在同一搜索中搜索多个单词?

ios - 自动完成算法