ElasticSearch名字/姓氏匹配

时间:2013-11-19 02:02:08

标签: elasticsearch fuzzy-search

我有两个字段:firstlast

我正在尝试使用multi_match模糊匹配全名:

"multi_match": {
    "query": name,
    "fields": [
        "first",
        "last",
    ],
    "fuzziness": 0.1
}

此搜索仅在搜索100%完全匹配first +' '+ last name时匹配。这是不可取的。

使用ElasticSearch的更有效的名字搜索技术是什么? (假设两个字段必须分开)

e.g。输入Dan Smi应该与Danny Smith匹配

2 个答案:

答案 0 :(得分:3)

听起来你正在寻找Phonetic Analysis,它可用于创建代表原始令牌听起来的新标记。

我使用您的示例数据here创建了一个可运行的示例,该示例显示了使用双变音符过滤器搜索匹配名字和姓氏字段的“Dan Smi”。

Phonetic Analysis插件的github页面包含您可能想要尝试的所有其他实现的语音标记过滤器的名称。

答案 1 :(得分:1)

呃真的,重新阅读你的问题,更多的是分析,你可以在线玩分析器/词干分析器==> http://es.subitolabs.com/#/testr/20061741

另一件事,你看过一个叫做“建议”的东西吗?相当新,但如此强大==> http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters.html

在这种情况下,我的意思是cross_field,您可能需要围绕ES做一些额外的工作,然后将输入字符串标记化(使用ES分析API获取标记片段),然后为每个标记运行建议器,结束重新组装结果。