Elasticsearch:如何对查询字符串查询的结果进行排序?

时间:2015-09-18 08:09:24

标签: sorting elasticsearch

我使用Elasticsearch搜索日文文档,并结合多个字段(形态分析+ N-Gram)进行查询。

以下查询:

{  
  "query":{  
    "bool":{  
      "must":{  
        "query_string":{  
          "query":"QUERY_KEYWORD",
          "fields":[  
            "title",
            "description",
            "content",
            "content.ngram^3"
          ]
        }
      },
      "should":[  
        [  
          {  
            "range":{  
              "created":{  
                "boost":"5",
                "gte":"now-1M"
              }
            }
          }
        ]
      ]
    }
  }
  "sort":{
      "view_count": {"order": "desc"}
  }
}

返回索引中的每个文档view_count排序(忽略query_string的分数),这不是我想要的。

多级排序也不好用:

"sort": [
        { "view_count":   { "order": "desc" }},
        { "_score": { "order": "desc" }}
]

返回与上面的查询相同的内容,

"sort": [
        { "_score": { "order": "desc" }},
        { "view_count":   { "order": "desc" }}
]

根本不对任何事情进行排序(我怀疑view_count只是作为_score的制作者。)

问题是:如何获得与QUERY_KEYWORD排序的view_count匹配的文档?

提前致谢。

1 个答案:

答案 0 :(得分:0)

按分数排序的排序。在你的情况下,我认为你必须看看功能分数查询。特别是字段值因子。

https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-function-score-query.html#function-field-value-factor

有了这个,视图的数量会根据视图的数量影响得分。