elasticsearch:如何按标签列表和数字字段进行排序

时间:2015-08-21 02:18:53

标签: elasticsearch

我在映射中有3个文档,如下所示

{ “标签”:[ “一”], “算”:10 }
{ “标签”:[ “一”, “B”, “C”], “算”:50 }
{ “标签”:[ “一”, “C”], “算”:100 }

当我按标签搜索时,请说 {“should”:[“tags”:“a”,“tags”:“b”]}

希望结果按标签匹配的数量排序,然后按计数desc排序,如下所示:

{ “标签”:[ “一”, “B”, “C”], “算”:50 }
{ “标签”:[ “一”, “C”], “算”:100 }
{ “标签”:[ “一”], “算”:10 }

我怎样才能做到这一点?我尝试排序[_score,{“count”:“desc”}],但是,由于得分值都不同,{“count”:“desc”}部分从未起作用。

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

 {
   "sort": [{"count": "desc"}],
   "query": {
     "filtered": {
       "filter": {
         "bool": {
           "should": [
             {"term": {"tag": "a"}},
             {"term": {"tag": "b"}}
         }
       }
     }
   }
 }

使用过滤查询忽略文档得分,并使用sort进行排序。

答案 1 :(得分:0)

这将按分数和按计数对结果进行排序:

{
    "query": {
        "bool": {
            "should": [
                {"term": {"tag": "a"}},
                {"term": {"tag": "b"}}
            ]
        }
    },
    "sort": {
        "_score": {
            "order": "desc"
        },
        "count": {
            "order": "desc"
        }
    }
}