【问题标题】:How can I sort Elastic Search query results based on relevancy?如何根据相关性对 Elastic Search 查询结果进行排序?
【发布时间】:2015-09-25 00:55:06
【问题描述】:

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

以下是我的情况:

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

  1. 精确模式“Hello World”
  2. “你好”和“世界”
  3. “你好”或“世界”

我想在一个查询中完成上述操作。我知道所有这些都可以单独使用 match_phrase 和 default_operator 来完成 OR/AND。 但我希望这三个都在一个查询中完成。

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

现在弹性搜索有可能吗?

【问题讨论】:

  • 由于1)2)3) 的子集,我猜你想在一个查询中得到三个不同的结果,这是你想要的吗?我不确定这是否可以做到。您可以添加某种形式的所需输出吗?
  • MarioTrucco:嗨,马里奥。我希望根据相关性对结果进行排序。因此,如果文档包含确切的短语,则它是最相关的。如果文档在其中的某个位置同时包含单词 (AND),则它是中等相关的。如果文档包含至少一个单词(OR),则它是最不相关的。另外,我想知道,默认情况下,弹性搜索将在令牌之间执行 OR。对吧??
  • 请编辑包含此信息的帖子,因为它并不明显(至少对我而言),而且不是每个人都阅读 cmets。我想我有答案了,我会在今天晚些时候发布

标签: elasticsearch


【解决方案1】:

这是您可能需要的:

查询字符串

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

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

这将获取所有组合:

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

【讨论】:

    【解决方案2】:

    您想检查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
            }
        }
    }
    

    这是要求您的三个条件中至少有 1 个为真 (minimum_should_match)。如您所愿,满足的条件越多,文档的得分就越高(因此将首先返回)。你可以boost一个条件的重要性,这里我把整个词组匹配的重要性加倍,但这只是一个例子。

    【讨论】:

    • 感谢马里奥,它确实帮助我获得了关于如何实现相同的高级想法......
    • @VipulKumar 欢迎,您只需要替换 FIELDNAME :)
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2012-11-12
    • 1970-01-01
    • 2013-09-30
    • 2016-04-21
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多