elasticsearch – 弹性搜索:“Term”,“Match Phrase”和“Query String”之间的差别

术语查询匹配单个术语,由于它是:不分析值。
因此,它没必要根据你索引的状况而下降。html

 

若是您在索引时间提供Bennett而且未分析该值,则如下查询将不返回任何内容:app

 

{
  "query": {
    "term" : { "user" : "bennett" }
  }
}

match_phrase若是为查询字段定义分析器,则查询将分析输入,并查找符合如下标准的文档:elasticsearch

>全部字词必须出如今字段中
>它们必须具备与输入值相同的顺序ide

例如,若是您索引如下文档(使用字段foo的标准分析器):ui

 

{ "foo":"I just said hello world" }

{ "foo":"Hello world" }

{ "foo":"World Hello" }

此match_phrase查询将仅返回第一个和第二个文档:code

 

{
  "query": {
    "match_phrase": {
      "foo": "Hello World"
    }
  }
}

query_string在默认状况下,在包含多个文本字段的文本的_all字段上查询搜索。最重要的是,它被解析并支持一些运算符(AND / OR …),通配符等(见related syntax)。htm

做为match_phrase查询,根据查询字段上设置的分析器分析输入。blog

取消连接match_phrase,分析后得到的术语没必要按相同的顺序,除非用户已在输入中使用引号。索引

例如,使用与之前相同的文档,此查询将返回全部文档:文档

 

{
  "query": {
    "query_string": {
      "query": "hello World"
    }
  }
}

可是此查询将返回与match_phrase查询相同的2个文档:

 

{
  "query": {
    "query_string": {
      "query": "\"Hello World\""
    }
  }
}

关于这些查询的不一样选项还有不少要说的,请查看相关文档:

term
match_phrase
query_string

 

https://www.cnblogs.com/buxizhizhoum/p/9874703.html