Neo4j 如何实现模糊搜索

Neo4j 如何实现模糊搜索,neo4j,cypher,Neo4j,Cypher,我正在使用Neo4j 3 REST API,我有一个名为customer的节点,它具有名称等属性。我需要获得客户名称的搜索结果,例如,我应该获得输入“joan”的名称“john”的结果。如何实现模糊搜索以获得所需的结果 提前感谢首先,我想让您知道,如果您使用的是Neo4j 3.x,那么3.x目前处于测试阶段,尚未被认为是稳定的 在Neo4j中实现模糊搜索有两个选项。可以使用实现基于Lecene的索引。这将提供Lucene可以做的任何事情,尽管您可能需要做更多的工作。您还可以实现自己的,这将允许您

我正在使用Neo4j 3 REST API,我有一个名为customer的节点,它具有名称等属性。我需要获得客户名称的搜索结果,例如,我应该获得输入“joan”的名称“john”的结果。如何实现模糊搜索以获得所需的结果


提前感谢

首先,我想让您知道,如果您使用的是Neo4j 3.x,那么3.x目前处于测试阶段,尚未被认为是稳定的

在Neo4j中实现模糊搜索有两个选项。可以使用实现基于Lecene的索引。这将提供Lucene可以做的任何事情,尽管您可能需要做更多的工作。您还可以实现自己的,这将允许您更直接地使用Lucene


也许更简单的选择是将elasticsearch与Neo4j一起使用,并让elasticsearch为您的全文索引。你可以看看neo4j.com上的页面。在那里,他们提供了一个链接到一个Neo4j的插件,该插件使用Neo4j的数据自动更新ElasticSearch,并为模糊地查询图形提供了一个端点。关于如何做到这一点,还有很多问题需要解决。

退一步说,您试图用模糊匹配解决的问题是什么

我的经验是,拼写错误和打字错误远不像你想象的那么常见,而且只要有可能,人类更喜欢精确匹配。如果没有精确的匹配(通常只是单词之间缺少空格),那么最好使用拼写检查器,这就是模糊匹配应该起作用的地方


此外,您的示例将“joan”与“john”匹配,但像“joanie”这样的同义词更有用。如果你有大量的内容要处理,你可以提取一些关系,使用模糊和机器学习来识别“joanne”和“joni”可能的同义词,然后提交给人类策展人。“Jon”看起来像一个相关的名字,但它不是,而“jo”甚至“nonie”在这些分组中可能是也可能不是昵称。

您必须尝试使用在这种情况下有效的昵称。如果你的输入是Joan,你将不会得到John作为响应,除非你只是给jo作为输入,而jo和jo都会得到。要获得您期望的内容,您必须使用soundex搜索