共计 1140 个字符,预计需要花费 3 分钟才能阅读完成。
query_string 参数 之 auto_generate_phrase_queries
,default_operator
默认值导致呈现以上问题:
auto_generate_phrase_queries
:是否主动生成短语查问(有可能一条字符串 生成多个短语)默认值 false;default_operator
:词与词,或短语与短语之间的运算符(and 或 or)默认 or
如果有以下三条数据
ID | 题目 |
---|---|
1 | 我想学习 elasticsearch |
2 | 什么是 elasticsearch |
3 | 我想学习 java and elasticsearch |
张三搜寻 我想学习 elasticsearch
elasticsearch query 为
{
"query": {
"query_string": {"query": "title: 我想学习 elasticsearch"}
}
}
后果会把,ID 为 1,2,3 的都查问进去
起因是 query_string 有一个参数 default_operator
默认值为 or
如果分析器把 我想学习 elasticsearch
分词为 我
,想
, 学习
,elasticseach
,
那么当 default_operator
值为 or
或不设置时
只有 title 里边蕴含 我
, 想
,学习
,elasticseach
,其中一个就会查问进去;
同理当 default_operator
值为 and
时
title 里边必须同时蕴含 我
,想
, 学习
,elasticseach
,,才会查问进去
{
"query": {
"query_string": {
"default_operator":"and",
"query": "title: 我想学习 elasticsearch"
}
}
}
后果会把 ID 为 1,3 的查问进去;
然而张三说 我搜寻 我想学习 elasticsearch
只想把 ID 为 1 的搜寻进去怎么办呢
两种解决方案:
1:加双引号("我想学习 elasticsearch"
)
{
"query": {
"query_string": {
"default_operator":"and",
"query": "title:\" 我想学习 elasticsearch\""
}
}
}
2:auto_generate_phrase_queries
设置为 true (即短语搜寻)
{
"query": {
"query_string": {
"default_operator":"and",
"auto_generate_phrase_queries":true,
"query": "title: 我想学习 elasticsearch"
}
}
}
以上两种办法均是通过 短语搜寻 实现的;我想学习 elasticsearch
生成的短语为 我想学习 elasticsearch
;
所以 title 里边必须按程序蕴含 我
, 想
,学习
,elasticseach
才会查问进去 即 ID 为 1 ;
正文完
发表至: elasticsearch
2020-07-15