Elasticsearch: "Term"、 "Match Phrase"和 "Query String"之间的差异

标签 elasticsearch

Elasticsearch 的新手,试图更好地理解这些查询之间的区别。据我所知,term 匹配单个术语(匹配是否需要小写?),match phrasequery string 匹配一串文本。

最佳答案

term 查询按原样匹配单个术语:该值未分析。 因此,它不必根据您索引的内容小写。

如果您在索引时提供了 Bennett 并且未分析该值,则以下查询将不会返回任何内容:

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

match_phrase 如果为查询字段定义了分析器,查询将分析输入并找到符合以下条件的文档:

  • 所有条款必须出现在字段中
  • 它们必须与输入值具有相同的顺序
  • 不得有任何中间词,即连续(可能不包括停用词,但这可能很复杂)

例如,如果您索引以下文档(对字段 foo 使用 standard 分析器):

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

{ "foo":"Hello world" }

{ "foo":"World Hello" }

{ "foo":"Hello dear world" }

match_phrase 查询将只返回第一个和第二个文档:

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

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

作为 match_phrase 查询,输入根据查询字段上设置的分析器进行分析。

match_phrase 不同,分析后获得的术语不必按相同顺序排列,除非用户在输入两边使用了引号。

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

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

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

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

关于这些查询的不同选项还有很多要说的,请查看相关文档:

希望这是足够清楚的,它会有所帮助。

关于Elasticsearch: "Term"、 "Match Phrase"和 "Query String"之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001002/

相关文章:

java - Elasticsearch 按字段聚合和求和(group by)

elasticsearch - logstash文件输入配置

search - 如何提高Elasticsearch中的搜索相关性顺序?

python - 如何在python的elasticsearch中索引大型json响应?使用Elasticsearch DSL

oracle - Docker中的Logstash没有响应

elasticsearch - AWS CodeBuild:使用elasticsearch单元测试构建应用程序无法以root身份运行

elasticsearch - 将 kibana 仪表板链接到 "Discover"

json - 如何使用 hadoop map-reduce 和 es-hadoop 将 json 索引到 elasticsearch?

datetime - 具有日期格式的索引映射,使用curl引发解析异常

elasticsearch - 使用俄语文本分析器搜索不起作用