ElasticSearch-DSL搜索 term与match

term精确搜索
搜索的时候会把用户搜索内容,比如“我知道”作为一整个关键词去搜索,而不会对其进行分词后再搜索

POST    http://10.0.0.220:9200/shop/_doc/_search

{
    
    
	"query":{
    
    
		"term":{
    
    
			"nickname":"我知道"
		}
	},
	"_source":[
		"id",
		"nickname",
		"age"
	]
}

在这里插入图片描述
head可视化操作:
在这里插入图片描述
terms 多个词语匹配检索

POST     http://10.0.0.220:9200/shop/_doc/_search
{
    
    
    "query": {
    
    
        "terms": {
    
    
            "desc": ["我知道", "好好学习", "搜索"]
        }
    }
}

match分词搜索
match会对慕课网先进行分词(其实就是全文检索),在查询,而term则不会,直接把“我知道”作为一个整的词汇去搜索。

POST    http://10.0.0.220:9200/shop/_doc/_search

{
    
    
	"query":{
    
    
		"match":{
    
    
			"nickname":"我知道"
		}
	},
	"_source":[
		"id",
		"nickname",
		"age"
	]
}

在这里插入图片描述

对比上面term和match的结果便知道效果

match_phrase 短语匹配
分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的。

POST     http://10.0.0.220:9200/shop/_doc/_search

{
    
    
    "query": {
    
    
        "match_phrase": {
    
    
            "desc": {
    
    
            	"query": "男人 低",
            	"slop": 20
            }
        }
    }
}

slop:允许词语间跳过的数量

在这里插入图片描述

operator

or:搜索内容分词后,只要存在一个词语匹配就展示结果
and:搜索内容分词后,都要满足词语匹配

POST     http://10.0.0.220:9200/shop/_doc/_search

{
    
    
    "query": {
    
    
        "match": {
    
    
            "desc": "不知道在哪里"
        }
    }
}

##等同于
{
    
    
    "query": {
    
    
        "match": {
    
    
            "desc": {
    
    
                 "query":"不知道在哪里",
                 "operator":"or"
            }
        }
    }
}

##相当于
select * from shop where desc=‘不知道’ or|and desc=‘在哪里’
在这里插入图片描述
minimum_should_match
最低匹配精度,至少有 [分词后的词语个数] x百分百,得出一个数据值取整。举个例子:当前属性设置为70,若一个用户查询检索内容分词后有10个词语,那么匹配度按照 10x70%=7,则desc中至少需要有7个词语匹配,就展示;若分词后有8个,则 8x70%=5.6,则desc中至少需要有5个词语匹配,就展示。也能设置具体的数字,表示个数。

POST     http://10.0.0.220:9200/shop/_doc/_search

{
    
    
    "query": {
    
    
        "match": {
    
    
            "desc": {
    
    
                "query": "哈哈哈,你搞什么,我在哪里",
                "minimum_should_match": "60%"
            }
        }
    }
}

在这里插入图片描述

当我们把这个百分比调大:

在这里插入图片描述

根据文档索引id查询

POST     http://10.0.0.220:9200/shop/_doc/_search

{
    
    
    "query": {
    
    
        "ids": {
    
    
            "type": "_doc",
            "values": ["1001", "1007", "1008"]
        }
    }
}

在这里插入图片描述

multi_match
满足使用match在多个字段中进行查询的需求(提升权重前)

POST    http://10.0.0.220:9200/shop/_doc/_search

{
    
    
    "query": {
    
    
        "multi_match":{
    
    
        	"query":"为道在哪里",
        	"fields":[
        		"desc","nickname"	
        	]
        }
    }
}

在这里插入图片描述

boost
权重,为某个字段设置权重,权重越高,文档相关性得分就越高。通畅来说搜索商品名称要比商品简介的权重更高。

POST    http://10.0.0.220:9200/shop/_doc/_search

{
    
    
    "query": {
    
    
        "multi_match":{
    
    
        	"query":"为道在哪里",
        	"fields":[
        		"desc^10","nickname"	   ###次数^10就是提高权重
        	]
        }
    }
}

desc^10 代表搜索提升10倍相关性,也就是说用户搜索的时候其实以这个desc为主,nick为辅,desc的匹配相关度当然要提高权重比例了。
​​​​​​​在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_31776219/article/details/114631276