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

Java Neo4j Lucene索引-使用通配符执行模糊搜索,java,search,autocomplete,lucene,neo4j,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:" + search

我正在尝试使用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(" ", "?") + "~")) {
     ...
 }
Index ind=db.Index().forNodes(“节点自动索引”,
stringMap(IndexManager.PROVIDER,“lucene”,“type”,“fulltext”);
对于(节点:ind.query(“名称:”+searchTerm.replace(“,”?”)+“~”){
...
}
当searchTerm中有空格字符时,就会出现问题。Lucene将空格视为下一个字段的开始,并抛出一个错误。我发现空格字符可以用替换?通配符。但是如果我这样做,我就不会从lucene那里得到任何匹配。围绕这个问题的工作是什么


另外,我想知道是否可以合并*&~,因为我希望结果以type开头,而~operator在字符串中的任何位置查找该词的出现情况

请确保将搜索词封装在双引号中。这是lucene对n克的要求。这是因为它们的语法保留了使用空格的关键字

Index<Node> ind = db.index().forNodes("node_auto_index",
    MapUtil.stringMap( IndexManager.PROVIDER, "lucene", "type", "fulltext" )) ;
for ( Node node : ind.query("name:" + ("\"" + searchTerm + "\"") + "~")) {
    ...
}
Index ind=db.Index().forNodes(“节点自动索引”,
stringMap(IndexManager.PROVIDER,“lucene”,“type”,“fulltext”);
对于(节点:ind.query(“名称:”+(“\”+searchTerm+“\”)+“~”){
...
}


然后有几个选项。我建议不要将Neo4j用于自动完成。相反,您应该使用熟悉的文件存储格式创建JSON映射。请参见我使用Neo4j构建预测自动完成的示例--