架构师成长记_第八周_14_dsl搜索 - term, terms, match, match_phrase 等方式检索详解
Posted 流浪少年的梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构师成长记_第八周_14_dsl搜索 - term, terms, match, match_phrase 等方式检索详解相关的知识,希望对你有一定的参考价值。
文章目录
dsl搜索-term 与 match
1. term
term 表示当一个用户输入单个词条的时候, 是不会进行分词搜索的, 即term 的词条为keyword.
测试如下:
{
"query":{
"term":{
"desc":"慕课网"
}
},
"_source": [
"id",
"nickname",
"desc"
]
}
2. match
match 表示当一个用户输入一个词条的时候, 是会进行将输入词条进行分词搜索的, 即全文检索
测试如下:
PS: 1. match: operator (默认是 or)
or
表示用户的搜索词条可以出现在不同的数据项中,
and
表示用户的搜索词条必须在同一条数据中出现, 没有先后顺序
minimum_should_match : 60 %
表示用户的搜索词条只进行匹配60%以上的内容, 即如果有用户输入8个关键词, 这匹配包含4个关键字(算出来后向下取整
)以上的数据项; 也可以输入数字, 这匹配该数字以上的数据.
PS: 2. ids 根据ES的id进行检索
{
"query":{
"ids":{
"type": "_doc",
"values": [
"1001",
"1003",
"1009"
]
}
},
"_source": [
"id",
"nickname",
"desc"
]
}
3. terms
terms 表示当一个用户输入多个词条的时候, 多个词条都会当作关键字进行检索.
测试如下:
{
"query":{
"terms":{
"desc":["慕课网","学习","骚年"]
}
},
"_source": [
"id",
"nickname",
"desc"
]
}
4. match_phrase (严格的匹配, 具有顺序)
match_phrase 表示当用户去查询的时候, 查询的词条首先会进行分词, 分词后的词语必须包含在同一条数据中, 且分词后的词语具有先后顺序, 他们必须在数据中连续, 可以设置 slop 的值, 来表示他们直接允许跳过的最大的关键词的数量.
测试
{
"query":{
"match_phrase":{
"desc":{
"query": "大学 毕业"
}
}
},
"_source": [
"id",
"nickname",
"desc"
]
}
PS: slop 测试
{
"query":{
"match_phrase":{
"desc":{
"query": "大学 研究生",
"slop": 3
}
}
}
}
5. multi_match (多重查询)
match
是单个查询.
multi_match
是多重查询, 即可以在查询时候, 同时查询多个字段包含该信息的数据项, 比如慕课网可以在nickname中和desc中同时检索.
{
"query":{
"multi_match":{
"query": "慕课网",
"fields" : [
"desc",
"nickname"
]
}
},
"_source": [
"id",
"nickname",
"desc"
]
}
multi_match
权重boost设置 ^10
以上是关于架构师成长记_第八周_14_dsl搜索 - term, terms, match, match_phrase 等方式检索详解的主要内容,如果未能解决你的问题,请参考以下文章
架构师成长记_第八周_13_dsl搜索-查询所有内容与分页查询
架构师成长记_第八周_13_dsl搜索-查询所有内容与分页查询
架构师成长记_第八周_13_dsl搜索-查询所有内容与分页查询