为什么elasticsearch只返回5个突出显示的字段,该字段包含一个数组,该数组基于查询具有更多的匹配项?

dzjeubhm  于 2022-12-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(171)

为了演示这个问题,下面是一个使用单个文档动态创建的索引:

PUT /test_highlight_number/_doc/1 
{ 
   "id": 1,
   "names": ["john 1","john 2", "john 3", "john 4", "john 5", "john 6", "john 7", "john 8"]
}

运行以下搜索时

GET /test_highlight_number/_search
{
  "query": {
    "match": {
      "names": {
        "query": "john"
      }
    }
  },
  "highlight": {
    "fields": {
      "names": {}
    }
  }
}

hitshighlight键中,我得到的响应仅突出显示了8个匹配名称中的5个。是否有方法告诉elasticsearch根据查询返回字段的所有突出显示?

{
  "took" : 12,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.55034834,
    "hits" : [
      {
        "_index" : "test_highlight_number",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.55034834,
        "_source" : {
          "id" : 1,
          "names" : [
            "john 1",
            "john 2",
            "john 3",
            "john 4",
            "john 5",
            "john 6",
            "john 7",
            "john 8"
          ]
        },
        "highlight" : {
          "names" : [
            "<em>john</em> 1",
            "<em>john</em> 2",
            "<em>john</em> 3",
            "<em>john</em> 4",
            "<em>john</em> 5"
          ]
        }
      }
    ]
  }
}
2cmtqfgy

2cmtqfgy1#

这是因为您没有指定number_of_fragments参数。它默认为5。您应该阅读突出显示设置部分。
如果你想检索所有与查询匹配的片段,你的查询应该是这样的:

{
  "query": {
    "match": {
      "names": {
        "query": "john"
      }
    }
  },
  "highlight": {
    "fields": {
      "names": {
        "number_of_fragments": 0
      }
    }
  }
}

相关问题