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