2016-05-23 52 views
1

我最近运行Elasticsearch过滤请求是Elasticsearch过滤器请求的结果的默认文档序列是什么?

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

所以,我可以找到a_id所有文档中257793, 257798, 257844,结果257844, 257798, 257793。到现在为止还挺好。

然后我发现无论序号是数字的顺序,返回文档总是在同一a_id顺序。也就是说,即使我跑

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

结果文档是在257844, 257798, 257793的顺序为好。

所以我很好奇Elasticsearch过滤背后的机制。任何人都可以帮助我并给我一个提示吗?

+0

我认为这可能是有关与存储在ES上的“索引序列”,但没有“成熟的理论”在我的脑海中证明了这一点。 – user1702713

+0

另外'a_id'是种类“unique_id”,没有2个文档具有相同的'a_id'。所以倒序索引就像'257798 - > doc_257798','257844 - > doc_257844' – user1702713

回答

0

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

你可以得到更多的信息:

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

+0

谢谢你的回答,但默认情况下ES不会按降序返回,因为我已经尝试过了,但是以第一个中间值。 :( – user1702713

+0

我错过了在我的回答中正确解释的内容'在Elasticsearch中,相关性分数由搜索结果中返回的浮点数表示为_score,所以默认排序顺序是_score递减。是desc顺序,但不是'_id'值,而是'_score'。你可以尝试'sort':{“a_id”:{“order”:“desc”}}'' – Hugo

相关问题