【问题标题】:smart search by first/last name按名字/姓氏智能搜索
【发布时间】:2011-06-23 18:48:24
【问题描述】:

我必须建立一个搜索工具,能够通过他们的名字/姓氏搜索成员,并且可能是其他一些搜索参数(即地址)。

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

搜索应该足够聪明,这样“正确”的结果就会出现在列表的前几项中。搜索还应该容忍拼写错误和拼写错误,甚至可能知道名称的快捷方式,例如 Bob vs. Robert 或 Bill vs. William。

我开始研究 Lucene 及其家族(如弹性搜索)作为这项工作的工具。虽然它具有一系列令人印象深刻的功能,可以解决全文搜索的类似问题,但我不太确定如何在我的任务中使用它们 - 到目前为止,Lucene 可能根本不是合适的工具。

你们怎么看 - 我如何利用 Elastic Search 来解决我的问题?还是我应该去别处看看?

【问题讨论】:

    标签: search lucene


    【解决方案1】:

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

    例如:

    name:johnni~0.8
    

    将返回“约翰尼”

    Solr 还提供了广泛的现成搜索filters 和可用于搜索的分析器。 在您的情况下,我可能会将几个过滤器工厂链接在一起:

    • TrimFilterFactory - 修剪查询
    • Lo​​werCaseFilterFactory - 消除大小写差异
    • ISOLatin1AccentFilterFactory - 去除字母中的重音(大多数人不使用重音搜索)
    • PhoneticFilterFactory - 用于匹配类似查询的声音:kris -> chris

    查看链接下的文档,如何使用使用上述所有过滤器的分析器设置新的 solr 实例非常简单。我用类似的东西来搜索城市名称,效果很好。

    【讨论】:

      【解决方案2】:

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

      搜索应该足够聪明,以便“正确”的结果会出现在列表的前几项中

      是否有任何搜索引擎不尝试这样做?

      【讨论】:

      • 嗯 - 是的,也不是。即,即使您自己不确定自己在寻找什么,谷歌也会为您提供建议,因为您正在寻找与您的搜索词相关的东西(不确定是什么)。就我而言,我一看到就知道我找到了我的记录(文件)。而且我很确定我只需要一个
      • @mfeingold:不幸的是,如果您的标准是“它会符合我 (mfeingold) 的期望吗?”我认为这里的任何人都无法回答,因为我们不知道您的期望。为什么不试试呢?设置 Solr 非常容易。
      【解决方案3】:

      就 Bob/Robert 而言,这可以通过同义词完成,但您需要从某个可靠来源获取同义词数据。

      除了@Asaf 提到的内容之外,您还可以尝试使用 N-gram 索引来处理拼写变体。请参阅CJKAnalyzer 了解如何执行此操作的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 2018-09-02
        • 1970-01-01
        • 2019-09-08
        • 2015-08-01
        相关资源
        最近更新 更多