Elasticsearch - 排序多索引查询

时间:2013-06-01 05:17:17

标签: elasticsearch

我正在使用elasticsearch构建自动完成搜索,因此我需要查询3个索引postscommentsauthors。我有以下查询:

{
   "query":{
      "query_string":{
         "query":"something"
      }
   }
}
电话:

curl -X GET 'http://localhost:9200/posts,comments,authors/_search?pretty' -d '{
  "query": {
    "query_string": {
      "query": "something"
    }
  }
}'

我需要按特定索引字段对结果进行排序,例如:

帖子索引有一个名为comments_count的字段,评论votes_count和作者posts_count。在比较帖子时,它应该按comments_count排序,然后是评论votes_count,当作者然后posts_count

可以做那样的事吗?我不想将索引合并为一个,因为它们索引完全不同的文档。

3 个答案:

答案 0 :(得分:2)

好吧,我的问题是,如果我按照所有索引中不存在的字段排序,则不会返回文档。

管理解决:

{
   "_script":{
      "script":"type=doc['_type'].value;if(type=='posts'){return doc['comments_count'].value} else {return 0};",
      "type":"number",
      "order":"desc"
   }
}

至少现在显示文件,即使在底部。

答案 1 :(得分:1)

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

使用ignore unmapped_type在查询多个索引时忽略该字段,并且该字段在其他索引中不存在。

答案 2 :(得分:1)

您可以使用相同的名称(例如comments_count)进行索引,并执行常规排序,而不是使用votes_countposts_countitems_count

{
  "sort": [
    { "items_count": "desc" }
  ]
}

如果还有其他实体缺少items_count,则可以选择ignore unmapped fields

{
  "sort": [
    { "items_count": { "order": "desc", "unmapped_type": "long" } }
  ]
}