如何根据相关性对Elastic Search查询结果进行排序?

时间:2015-09-22 10:19:49

标签: elasticsearch

我正在尝试在elastic search服务器中进行搜索。

以下是我的案例:

给搜索API一个术语"Hello World",返回所有文档 用:

  1. 确切模式" Hello World"
  2. "你好"和"世界"
  3. "你好"或者"世界"
  4. 我想在一个查询中执行上述操作。我知道,所有这些都可以使用match_phrase和default_operator进行OR / AND。 但我希望所有这三个都能在一个查询中完成。

    我希望根据相关性对结果进行排序。因此,如果文档包含确切的短语,则它是最相关的。如果文档中包含单词(AND),则其中的某些位置具有中等相关性。如果文档中至少包含一个单词(OR),则它最不相关。

    截至目前,弹性搜索是否可行?

2 个答案:

答案 0 :(得分:1)

这可能是您需要的:

  

查询字符串

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

{
  "query": 
   {
    "query_string" : 
       {
        "query" : "Hello World"
       }
   }
}

这将获取所有组合:

  • 你好,世界,你好世界,世界你好。

答案 1 :(得分:1)

您想检查Bool Query,可能还有Boosting Query Clauses

对于您的示例,您可以执行

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "FIELDNAME": {
                            "query": "Hello",
                            "boost": 1
                        }
                    }
                },
                {
                    "match": {
                        "FIELDNAME": {
                            "query": "World",
                            "boost": 1
                        }
                    }
                },
                {
                    "match_phrase": {
                        "FIELDNAME": {
                            "query": "Hello World",
                            "boost": 2
                        }
                    }
                }
            ],
            "minimum_should_match" : 1
        }
    }
}

这要求你的三个条件中至少有一个是真的(minimum_should_match)。满足的条件越多,文档的得分就越高(因此它将首先返回),就像您希望的那样。你可以boost条件的重要性,在这里我将整个短语匹配的重要性加倍,但这只是一个例子。