我必须建立一个能够按名字/姓氏搜索成员的搜索工具,并且可能是其他一些搜索参数(即地址)。
搜索应该提供匹配候选者列表,以便用户可以选择他/她看起来“正确”匹配的任何内容。
搜索应该足够聪明,以便“正确”结果将成为列表中的前几个项目。搜索也应该容忍拼写错误和拼写错误,甚至可能知道名称捷径,即Bob vs. Robert或Bill vs. William。
我开始调查Lucene和家人(如弹性搜索)作为工作的工具。虽然它有一系列令人印象深刻的功能解决全文搜索的类似问题,但我不太确定如何将它们用于我的任务 - 直到可能Lucene根本不是正确的工具。
你们怎么想?我如何利用弹性搜索来解决我的问题?或者我应该去别处看看?
答案 0 :(得分:3)
Lucene支持编辑距离查询,以便您的搜索查询可以容忍某些拼写错误,您可以将其定义为术语允许的编辑距离。
例如:
name:johnni~0.8
将返回“johnny”
Solr还提供各种现成的搜索filters和可用于搜索的分析器。 在您的情况下,我可能会将几个过滤器工厂链接在一起:
查看链接下的文档,如何使用使用所有上述过滤器的Analyzer设置新的solr实例非常简单。我使用了类似的搜索城市名称的东西,它运作得相当好。
答案 1 :(得分:0)
Lucene可以容忍拼写错误和拼写错误,并且可以使用同义词。至于
搜索应该足够聪明,以便“正确”的结果将成为列表中的前几个项目
是否有任何搜索引擎不尝试这样做?
答案 2 :(得分:0)
就Bob / Robert而言,这可以通过同义词来完成,但您需要从一些可靠的来源获取同义词数据。
除了@Asaf提到的内容之外,您可以尝试使用N-gram索引来处理拼写变体。有关如何执行此操作的示例,请参阅CJKAnalyzer。