我有两个字段:first
和last
我正在尝试使用multi_match
模糊匹配全名:
"multi_match": {
"query": name,
"fields": [
"first",
"last",
],
"fuzziness": 0.1
}
此搜索仅在搜索100%完全匹配first +' '+ last name
时匹配。这是不可取的。
使用ElasticSearch的更有效的名字搜索技术是什么? (假设两个字段必须分开)
e.g。输入Dan Smi
应该与Danny Smith
匹配
答案 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获取标记片段),然后为每个标记运行建议器,结束重新组装结果。