【问题标题】:What is the default doc sequence of the result from an Elasticsearch filter request?Elasticsearch 过滤请求结果的默认文档序列是什么?
【发布时间】:2016-09-20 10:19:09
【问题描述】:

我最近运行了一个 Elasticsearch 过滤请求,它是

{
  "from" : 0,
  "size" : 10,
  "query" : {
    "filtered" : {
      "filter" : {
        "bool" : {
          "must" : {
            "terms" : {
              "a_id" : [ 257793, 257798, 257844 ]
            }
          }
        }
      }
    }
  },
  "explain" : false,
  "fields" : "a_id"
}

这样我就可以在257793, 257798, 257844 中找到所有带有a_id 的文档,结果是257844, 257798, 257793。到目前为止一切顺利。

然后我发现无论术语编号的顺序是什么,返回的文档总是在相同的a_id 顺序中。也就是说,即使我运行

     "terms" : {
          "a_id" : [257798, 257844, 257793 ]
        }

结果文档的顺序也是257844, 257798, 257793

所以我对 Elasticsearch 过滤背后的机制非常好奇。谁能帮助我并给我一个提示?

【问题讨论】:

  • 我认为这可能与存储在 ES 中的“索引序列”有关,但我认为没有“成熟的理论”来证明这一点。
  • 另外a_id 是一种“unique_id”,没有两个文档具有相同的a_id。所以倒排索引就像257798 -> doc_257798257844 -> doc_257844

标签: sql database search elasticsearch lucene


【解决方案1】:

默认情况下,ES按_score的降序返回。您可以提供排序选项,以说明您希望返回结果的顺序和内容。例如,基于日期字段

{
    "sort": { "date": { "order": "desc" }}
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

您可以获得更多信息:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html https://www.elastic.co/guide/en/elasticsearch/guide/current/_sorting.html

【讨论】:

  • 感谢您的回答,但默认情况下 ES 不会按降序返回,因为我已经尝试过了,但是以中间值作为第一个。 : (
  • 我错过了在我的回答中正确解释。 In Elasticsearch, the relevance score is represented by the floating-point number returned in the search results as the _score, so the default sort order is _score descending.所以默认是desc顺序,但不是_id值,而是_score。你可以试试"sort": { "a_id": {"order": "desc"}}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多