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的匹配相关度当然要提高权重比例了。​​​​​​​

最后修改于 2020-04-07 12:53:54
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇