首页 > 解决方案 > [search_after] 错误中的 VALUE_STRING 的未知键

问题描述

我正在对 18,000 个主题的结果集进行弹性搜索调用。因此我正在使用search_after。但是在第一次使用这个参数后我得到了以下错误。

Unknown key for a VALUE_STRING in [search_after]

我用的是elasticsearch 5.1,查询如下

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "CategoryId": "1-4534"
                }
              }
            ],
            "minimum_should_match": 1
          }
        }
      ]
    }
  },
  "size": 100,
  "from": 0,
  "sort": {"Name":"asc"} ,
  "search_after": "D106891_1"
}

要求是不对弹性搜索可以返回的结果数量设置任何明确的限制(默认为 10,000),而是进行一些分页,以防止用户数据在未来超过设定的限制时出现任何问题。我通过循环发送查询来执行分页,一次获得 100 个主题。这是通过将 size 设置为 100 并将值 每次迭代增加 100 来实现的。当我到达 from+size = 10000时,我正在添加 search_after 但它因上述错误而失败。如果我可以提供更多信息,请告诉我。谢谢。

标签: elasticsearch

解决方案


我只需要对 search_after 和 Name.lowercase 使用数组而不是 Name,因为这就是 Name 属性的映射的编写方式(如下所示)

           "Name": {
                        "type": "text",
                        "fields": {
                            "lowercase": {
                                "type": "text",
                                "analyzer": "mdm_lowercase_analyzer",
                                "fielddata": true
                            },
                            "raw": {
                                "type": "keyword"
                            }
                        }
                    }

推荐阅读