【问题标题】:Elasticsearch:: Sorting giving weird resultsElasticsearch:: 排序给出奇怪的结果
【发布时间】:2017-01-07 21:40:35
【问题描述】:

当我第一次搜索时,它对所有文档进行排序并给我前 5 条记录。但是,如果通过更改排序方向(ASC -> DESC)执行相同的搜索查询,则它不会再次对所有文档进行排序,它给我最后 5 个检索到的文档(来自上一个搜索查询),按 desc 顺序对它们进行排序,并给出它还给我。我期待它会按 DESC 顺序对所有可用文档进行排序,然后检索前 5 个结果。

我是做错了什么,还是错过了任何概念。

我的搜索查询:

{
    "sort": {
        "taskid": {
            "order": "ASC"
        }
    },
    "from": 0,
    "size": 5,
    "query": {
        "filtered": {
            "query": {
                "match_all": []
            }
        }
    }
}

我有 taskid 1 到 100 的数据。现在上面的查询在第一次尝试时从 taskid 1 到 5 获取了我的记录。现在,当我将排序方向更改为 desc 时,我希望返回 taskid 为 96-100(100,99,98,97,96 序列)的文档,但是我返回了 taskid 为 5,4,3,2 的文档, 1 在该序列中。这意味着,仅对先前返回的结果进行排序。

请注意 taskid 和 _id 在我的文档中是相同的。我在映射中添加了一个冗余字段,与 _id 相同

【问题讨论】:

  • order 应该小写。它应该是“asc”或“desc”:)
  • 我不认为值的大小写有问题。

标签: sorting elasticsearch elasticsearch-plugin elasticsearch-2.0


【解决方案1】:

在弹性搜索中,从es中提取结果后应用排序查询。根据您的问题中提到的查询,首先根据搜索条件过滤结果,然后对过滤后的结果应用排序。

【讨论】:

    【解决方案2】:

    只需更改order 键中值的大小写即可。

    {
    "sort": {
        "taskid": {
            "order": "asc"   // or "desc"
        }
    },
    "from": 0,
    "size": 5,
    "query": {
        "filtered": {
            "query": {
                "match_all": []
            }
        }
      }
    }
    

    希望这会有所帮助..

    【讨论】:

      【解决方案3】:

      如果您似乎只是根据数据的旧子集获得结果,则可能是您的新数据尚未编入索引。这在自动化测试中很容易发生,但在手动测试中不太可能发生。

      分段每秒都会重建,因此在索引和搜索之间添加大约一秒的延迟/睡眠应该可以解决您的测试问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-20
        • 2019-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多