【问题标题】:Set elasticsearch match precendence设置弹性搜索匹配优先级
【发布时间】:2022-06-18 18:28:48
【问题描述】:

因此,如果用户使用单词 covid 进行搜索,我首先想要所有这些结果,其中句子的标题以单词 covid 开头,然后我想要在标题的其他部分有单词的所有项目有字covid。我怎样才能做到这一点?

我想要更具体的答案,如何使用 searchkick 做到这一点。

【问题讨论】:

    标签: elasticsearch elasticsearch-query searchkick


    【解决方案1】:

    如果您使用默认映射,您可以使用带有两个should 子句的bool 查询,一个在text 上带有match,另一个是在.keyword 子字段上的prefix 查询,如图所示在下面的例子中。

    索引示例文档

    {
        "name" : "foo bar"
    }
    {
        "name" : "bar foo"
    } 
    

    搜索查询

    {
        "query": {
            "bool": {
                "should": [
                    {
                        "match": {
                            "name" : "foo"
                        }
                    },
                    {
                        "prefix": {
                            "name.keyword": "foo"
                        }
                    }
                ]
            }
        }
    }
    

    搜索结果

     "hits": [
                {
                    "_index": "71998426",
                    "_id": "1",
                    "_score": 1.1823215,
                    "_source": {
                        "name": "foo bar"
                    }
                },
                {
                    "_index": "71998426",
                    "_id": "2",
                    "_score": 0.18232156,
                    "_source": {
                        "name": "bar foo"
                    }
                }
            ]
    

    注意:第一个结果,foo bar 得分要高得多,并且在搜索结果中排在首位。

    【讨论】:

      【解决方案2】:

      你甚至可以使用 boost 我猜对 @Amit 代码的修改很少

              "query": {
                  "bool": {
                      "should": [
                          {
                              "match": {
                                  "name" : "covid",
                                  "boost" : 0.5
                              }
                          },
                          {
                              "prefix": {
                                  "name.keyword": "foo",
                                  "boost" : 1.0
                              }
                          }
                      ]
                  }
              }
          }```
      

      【讨论】:

        猜你喜欢
        • 2020-07-09
        • 2016-11-25
        • 1970-01-01
        • 2019-11-21
        • 2014-08-23
        • 2023-04-04
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多