2011-06-23 41 views
0

我必须建立一个搜索设施,能够通过名字/姓氏搜索成员,并且可以是其他一些搜索参数(即地址)。通过名字/姓氏进行智能搜索

搜索应提供匹配候选列表,以便用户可以选择他/她看起来“正确”匹配的任何内容。

搜索应该足够聪明,以便“正确”的结果将成为列表中的前几项。搜索还应该容忍拼写错误和拼写错误,甚至可能知道名字捷径,即鲍勃与罗伯特或比尔与威廉。

我开始研究Lucene和家庭(如弹性搜索)作为工作的工具。虽然它有一系列令人印象深刻的功能来解决全文搜索中的类似问题,但我不确定如何将它们用于我的任务 - 直到可能Lucene不是恰当的工具。

你们认为怎么样 - 我如何利用弹性搜索来解决我的问题?或者我应该看看其他地方?

回答

3

Lucene支持编辑距离查询,以便您的搜索查询将容忍一些拼写错误,您将其定义为允许的术语编辑距离。

例如:

name:johnni~0.8 

将返回“约翰尼”

而且Solr的提供了一个广泛的现成的搜索filters和分析仪可用于搜索的数组。 在你的情况,我可能会连锁几个过滤器工厂一起:

  • TrimFilterFactory - 修剪查询
  • LowerCaseFilterFactory - 摆脱的情况下,差异
  • ISOLatin1AccentFilterFactory - 删除从字母口音(大多数人不”牛逼搜索与反正口音)
  • PhoneticFilterFactory - 像之类的查询匹配的声音:克里斯 - >克里斯

外观在链接下的文档中,如何使用使用上述所有过滤器的分析器设置新的solr实例非常简单。我用类似的方法搜索城市名称,效果相当不错。

0

Lucene可以容忍拼写错误和拼写错误,并且可以使用同义词。至于

搜索应该足够聪明,这样的“正确”的结果将是列表

在最初的几个项目中是否有任何搜索引擎不尝试这样做?

+0

嗯 - 是的,没有。即谷歌是给你的建议,即使你自己不知道你在找什么,因为你正在寻找一些东西(不知道是什么)相关的搜索条件。就我而言,我会知道我一看到它就发现了我的记录(文档)。我很确定我只需要一个 – mfeingold

+0

@mfeingold:不幸的是,如果你的标准是“它会匹配我所期待的吗?”我不认为这里有人可以回答,因为我们不知道你期望什么。为什么不试试呢?设置Solr非常容易。 – Xodarap

0

就Bob/Robert而言,这可以用同义词完成,但是您需要从一些可靠的来源获取同义词数据。

除了@Asaf提到的内容,您可能会尝试使用N-gram索引处理拼写变体。有关如何执行此操作的示例,请参见CJKAnalyzer