【问题标题】:Elasticsearch search always returns empty resultsElasticsearch 搜索总是返回空结果
【发布时间】:2020-06-29 22:31:48
【问题描述】:

我使用 7.6.1 版本的 Elasticsearch,我尝试索引简单对象并查询它们。 我的索引没有问题,我可以按 id 查询,但是当我尝试将搜索与 Term 查询一起使用时,它会失败(0 Hit)。我不明白我做错了什么。

PUT product/_doc/b0264dad-6739-49ea-b691-e05a2883a724
{
  "name": "Name 2",
  "description": "Desc 1",
  "price": 11,
  "startSell": "2020-06-28T12:24:37.0070067+00:00",
  "endSell": "2020-07-19T12:24:37.0070161+00:00",
  "variants": [
    {
      "color": "Red",
      "size": 1
    },
    {
      "color": "Red",
      "size": 1
    },
    {
      "color": "Red",
      "size": 1
    },
    {
      "color": "Blue",
      "size": 1
    },
    {
      "color": "Yellow",
      "size": 1
    },
    {
      "color": "Yellow",
      "size": 2
    },
    {
      "color": "Yellow",
      "size": 3
    },
    {
      "color": "Purple",
      "size": 4
    }
  ]
}

有效,我可以通过它的 id 获取对象:

GET product/_doc/b0264dad-6739-49ea-b691-e05a2883a724

返回

{
  "_index" : "product",
  "_type" : "_doc",
  "_id" : "b0264dad-6739-49ea-b691-e05a2883a724",
  "_version" : 1,
  "_seq_no" : 6,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "Name 2",
    "description" : "Desc 1",
    "price" : 11,
    "startSell" : "2020-06-28T12:24:37.0070067+00:00",
    "endSell" : "2020-07-19T12:24:37.0070161+00:00",
    "variants" : [
      {
        "color" : "Red",
        "size" : 1
      },
      {
        "color" : "Red",
        "size" : 1
      },
      {
        "color" : "Red",
        "size" : 1
      },
      {
        "color" : "Blue",
        "size" : 1
      },
      {
        "color" : "Yellow",
        "size" : 1
      },
      {
        "color" : "Yellow",
        "size" : 2
      },
      {
        "color" : "Yellow",
        "size" : 3
      },
      {
        "color" : "Purple",
        "size" : 4
      }
    ]
  }
}

但是这三个请求都返回没有数据,我做错了什么? :

POST product/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "name": [
              "Name 2"
            ]
          }
        }
      ]
    }
  }
}


POST product/_search
{
  "query": {
    "term": {
      "name": {
        "value": "Name 2",
        "boost": 1
      }
    }
  }
}

POST product/_search
{
  "query": {
    "term": {
      "description": {
        "value": "Desc 1",
        "boost": 1
      }
    }
  }
}

【问题讨论】:

  • 你能提供你的索引的映射吗?
  • 我如何在 Kibana 中找到这个?

标签: elasticsearch search


【解决方案1】:

主要是因为这些字段 namedescription 被定义为索引中的 text 字段,默认情况下使用 standard analyzer 并在空格上拆分,因此为这些字段生成的标记将name2 用于您的 name 字段,desc1 用于 description 字段。

当您使用未分析的 term 查询并尝试匹配不存在的 name 2 令牌时。

解决方案: 将查询改为match查询,否则如果映射自动生成则使用.keyword字段,或者如果您打算使用@987654336,请定义一个关键字字段来存储数据@查询。

参考difference b/w term vs match query with example

【讨论】:

  • 我得出了同样的结论,Kibana 为我提供了关于 .keyword 语法的智能感知,也感谢您提供有用的链接!
  • @Cladoo 很高兴我能提供帮助,您也可以对链接中提到的答案(由我给出,因为这是非常常见的查询之一)投赞成票 :)
猜你喜欢
  • 2022-11-14
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多