一、什么是ES Fuzzy
ES Fuzzy是Elasticsearch中实现模糊搜索的一种技术,它可以处理用户输入中潜在的拼写错误或者单词变形,从而提高搜索结果的准确率。
与传统的全文搜索不同,ES Fuzzy可以考虑到单词之间的相似度以及单词本身的模糊匹配,将不同的查询和文档之间建立关联,提高搜索的效果。
ES Fuzzy的核心思想是使用编辑距离算法来计算查询中的单词与文档中的单词之间的相似度。编辑距离是指将查询单词通过添加、删除、替换等操作转换为文档中的单词所需的最小步数。通过设置一个合理的阈值,可以使得查询单词和文档单词之间的编辑距离小于该阈值的文档被返回。
二、ES Fuzzy的特性
1、支持多种模糊匹配方式
ES Fuzzy支持多种模糊匹配方式,例如:
GET /_search { "query": { "fuzzy": { "company_name": { "value": "toglloom", "fuzziness": "AUTO" } } } }
其中,fuzziness参数可以设置为AUTO、1、2等,表示不同的模糊匹配方式。
2、支持指定编辑距离
编辑距离是指从一个单词变成另一个单词所需的最小操作数。在ES Fuzzy中,可以通过fuzziness参数来指定所需的编辑距离。
GET /_search { "query": { "fuzzy": { "age": { "value": "2", "fuzziness": 1 } } } }
上面的查询请求会返回年龄等于2、或者编辑距离为1的文档。
3、支持前缀匹配和后缀匹配
ES Fuzzy可以进行前缀匹配和后缀匹配,指定prefix_length可以控制前缀匹配的长度,而suffix_length可以控制后缀匹配的长度。
GET /_search { "query": { "fuzzy": { "company_name": { "value": "googl", "fuzziness": 1, "prefix_length": 3, "max_expansions": 20 } } } }
三、ES Fuzzy的应用场景
ES Fuzzy可以应用于很多搜索场景中,例如:
1、搜索引擎中的拼写纠错。
拼写纠错一直是搜索引擎中的重要问题。ES Fuzzy可以很好地解决这个问题,从而提高相关搜索结果的准确率。
2、搜索商品名称或者描述。
商品名称或者描述中常常会出现拼写错误,使用ES Fuzzy可以将这些错误考虑在内,从而提高商品搜索结果的准确率。
3、搜索人名或者地名。
人名和地名常常会因为语言和拼写规则的差异而出现拼写错误,ES Fuzzy可以将这些错误考虑在内,从而提高搜索结果的准确率。
四、ES Fuzzy示例代码
GET /index/type/_search { "query": { "fuzzy": { "name": { "value": "jems", "fuzziness": "AUTO" } } } }
上面的示例中,我们使用ES Fuzzy来搜索name字段等于jems的文档,其中fuzziness参数设置为AUTO,即自动匹配模糊匹配程度。