5

我正在使用 elasticsearch 构建自动完成搜索,所以我需要查询 3 个索引posts, comments, authors. 我有以下查询:

{
   "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

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

4

3 回答 3

2

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

设法解决:

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

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

于 2013-06-01T06:10:35.790 回答
2

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

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

于 2015-07-01T18:58:21.693 回答
2

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

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

如果还有其他实体缺少items_count,则可以选择忽略未映射的字段

{
  "sort": [
    { "items_count": { "order": "desc", "unmapped_type": "long" } }
  ]
}
于 2018-02-22T14:29:54.433 回答