query_string参数 之 auto_generate_phrase_queriesdefault_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 ;