Elasticsearch搜索API没有返回所有结果

5
我有三个索引,它们都共享特定的键值对。当我使用请求主体执行全局搜索API"http://localhost:9200/_search"时,会涉及到这三个索引。
{"query":{
    "query_string":
    {
        "query":"city*"

        }
    }
}

它只返回了两个索引中的结果。我尝试使用相同的请求正文,通过更改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" 
                }
            }
        ]
    }
}


你是否正在使用GET HTTP方法?另外,你能否粘贴你的索引特定搜索请求的响应,只是想确保它不返回所有结果,因为使用GET HTTP方法在某些DSL中无法正常工作。此外,这不应该引起问题,但是你正在使用哪个版本的Elasticsearch?我想在我的端上重现这个问题。 - Amit
@OpsterElasticsearchNinja 请检查更新后的问题。 - David
1个回答

9
可能原因是您在查询中没有提供size参数。这会默认将结果计数限制为10个。尽管匹配结果也可能出现在第三个索引中,但排名前十的结果可能来自前两个索引。这进而导致人们认为第三个索引的结果未返回。
请尝试添加 "size" 参数。
{
  "query": {
    "query_string": {
      "query": "city*"
    }
  },
  "size": 20
}

在响应中,通过total关键字可以确定与查询匹配的文档数量。

"total": {
            "value": 1,
            "relation": "eq"
        }

谢谢,问题已解决 :)我们能否在请求体中添加任何内容以返回所有匹配结果?而不仅仅是限制为一个。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接