elasticsearch匹配与词条查询


74

我使用匹配查询搜索“ request.method”:“ GET”:

    {
      "query": {
        "filtered": {
          "query": {
            "match": {
              "request.method": "GET"
            }
          },
          "filter": {
            "bool": {
              "must": [
...

正如预期的那样,Match查询可以获得结果,如下所示:

在此处输入图片说明

但是问题是使用Term查询时没有结果。

更新查询以将“ match”更改为“ term”,并保持其他部分不变:

{
  "query": {
    "filtered": {
      "query": {
        "term": {
          "request.method": "GET"
        }
      },
      "filter": {
        "bool": {
          "must": [
...

我认为字词查询是Match查询的“未分析”版本。如上图所示,至少有一个记录的“ request.method”等于“ GET”。为什么上述术语查询没有结果?谢谢。

在此处输入图片说明


4
在词条查询中,尝试用get小写字母ro指定小写
Konstantin V. Salikhov

1
你明白了。谢谢。
Linlin 2014年

Answers:


104

假设您正在使用Standard Analyzer, GETget当存储在索引中时。源文档仍将具有原始的“ GET”。

match查询会将相同的标准分析器应用于搜索词,因此将匹配存储在索引中的内容。该term查询不会将任何分析器应用于搜索词,因此只会在倒排索引中查找该确切词。

要在您的示例中使用术语查询,请将大写的“ GET”更改为小写的“ get”或更改映射,以便将request.method字段设置为not_analyzed


8
或将request.method字段的映射更改为键入keyword
Johanneke '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.