系列文章目录
了解如何操作Elasticsearch的模糊查询
前言
实验的Elasticsearch环境为7.9
提示:以下是本篇文章正文内容,下面案例可供参考
一、模糊查询
fuzzy
查询是 term
查询的模糊等价。 也许你很少直接使用它,但是理解它是如何工作的,可以帮助你在更高级别的 match
查询中使用模糊性。
示例:
POST /my_index/my_type/_bulk
{ "index": { "_id": 1 }}
{ "text": "Surprise me!"}
{ "index": { "_id": 2 }}
{ "text": "That was surprising."}
{ "index": { "_id": 3 }}
{ "text": "I wasn't surprised."}
现在我们可以为词 surprize 运行一个 fuzzy 查询:
GET /my_index/my_type/_search
{
"query": {
"fuzzy": {
"text": "surprize"
}
}
}
从上图中可以看到查询的单词为surprize,但是查询到第一条和第三条数据。这是因为fuzzy 查询是一个词项级别的查询,所以它不做任何分析。它通过某个词项以及指定的 fuzziness 查找到词典中所有的词项。 fuzziness 默认设置为 AUTO
。
在我们的例子中, surprize 比较 surprise 和 surprised 都在编辑距离 2 以内, 所以文档 1 和 3 匹配。
通过以下查询,我们可以减少匹配度到仅匹配 surprise :
示例2:
GET /my_index/my_type/_search
{
"query": {
"fuzzy": {
"text": {
"value": "surprize",
"fuzziness": 1
}
}
}
}
二、模糊匹配查询
match
查询支持开箱即用的模糊匹配:
GET /my_index/my_type/_search
{
"query": {
"match": {
"text": {
"query": "SURPRIZE ME!",
"fuzziness": "AUTO",
"operator": "and"
}
}
}
}
查询字符串首先进行分析,会产生词项 [surprize, me] ,并且每个词项根据指定的 fuzziness 进行模糊化。
同样, multi_match 查询也支持 fuzziness ,但只有当执行查询时类型是 best_fields 或者 most_fields :
GET /my_index/my_type/_search
{
"query": {
"multi_match": {
"fields": [ "text", "title" ],
"query": "SURPRIZE ME!",
"fuzziness": "AUTO"
}
}
}
match 和 multi_match 查询都支持 prefix_length 和 max_expansions 参数。
总结
主要了解在Elasticsearch中如何使用模糊查询,以及如何操作。