You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Elasticsearch搜索返回hits为空,嵌套字段查询问题求助

搞定Elasticsearch搜索无结果的问题

嘿,刚用Elasticsearch就碰到搜不到结果的情况确实闹心!咱们一步步来解决:

核心问题:嵌套字段的搜索方式不对

你的custom字段是nested类型,这种类型和普通对象字段完全不一样——Elasticsearch会把每个嵌套对象单独存成独立的小文档,普通的match查询根本“碰不到”嵌套结构里的内容,自然返回空的hits。

正确的搜索请求写法

你需要用nested查询来穿透嵌套结构,而且如果只想拿到匹配的timestamp,可以加上inner_hits精准返回需要的字段:

GET http://localhost:9200/transcripts/type/_search
{
  "query": {
    "nested": {
      "path": "custom",
      "query": {
        "match": {
          "custom.value": "iTunes to rate review And subscribe"
        }
      },
      "inner_hits": {
        "_source": ["custom.timestamp"]
      }
    }
  }
}
  • path: "custom":告诉Elasticsearch要查询哪个嵌套字段
  • inner_hits:只返回匹配到的嵌套对象数据,这里指定只拿timestamp,不用返回整个文档

额外排查小技巧

如果改完还是搜不到,试试这几个检查点:

  • 先确认数据真的索引成功:发起GET /transcripts/type/_search不带任何查询条件,看看返回的文档里custom.value是否确实包含你要搜的文本
  • 检查分词差异:因为custom.valuetext类型,会被分词器拆分。你可以用这个接口测试搜索文本的分词结果:
GET /_analyze
{
  "text": "iTunes to rate review And subscribe",
  "index": "transcripts"
}

对比存储的custom.value的分词结果,看有没有匹配的词条

  • 顺便提一句:你的timestamp字段设成了text类型,如果它实际是时间格式(比如2024-05-20T12:00:00),建议改成date类型,后续做时间范围查询会方便很多

内容的提问来源于stack exchange,提问作者Siddeshwar Raghavan

火山引擎 最新活动