Elasticsearch 搜索 API 未返回所有结果

Dav*_*vid 5 python elasticsearch elastic-stack

我有三个索引,所有三个索引共享一个特定的键值对。当我使用请求正文使用api“ http://localhost:9200/_search ”进行全面搜索时

{"query":{
    "query_string":
    {
        "query":"city*"

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它仅返回两个索引的结果。我尝试通过更改 url 来使用相同的请求正文,以仅在丢失的索引“ http://localhost:9200/index_name/_search ”中进行搜索,并且该方法有效。我在这里错过了什么吗?

插入所有三个索引的代码遵循相同的过程,我使用 elasticsearch-py 来提取数据。

我正在使用 GET HTTP 方法,还尝试了 POST HTTP 方法。两者返回相同的结果。Elasticsearch 版本是 7.6.0。

特定索引搜索的结果如下所示

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "index_name",
                "_type": "meta",
                "_id": "LMRqDnIBh5wU6Ax_YsOD",
                "_score": 1.0,
                "_source": {
                    "table_schema": "test_table",
                    "table_name": "citymaster_old" 
                }
            }
        ]
    }
}

Run Code Online (Sandbox Code Playgroud)

Nis*_*ini 9

原因可能是您没有在查询中提供大小参数。默认情况下,这会将结果计数限制为 10。在所有结果中,前 10 名可能来自两个索引,即使匹配也存在于第三个索引中。这反过来又让人感觉第三个索引的结果没有被返回。

尝试添加size参数。

{
  "query": {
    "query_string": {
      "query": "city*"
    }
  },
  "size": 20
}
Run Code Online (Sandbox Code Playgroud)

total您可以通过响应中的键计算出与查询匹配的文档数量

"total": {
            "value": 1,
            "relation": "eq"
        }
Run Code Online (Sandbox Code Playgroud)