代码之家  ›  专栏  ›  技术社区  ›  maral

多匹配查询功能评分

  •  0
  • maral  · 技术社区  · 7 年前

    我有一个弹性查询,其中包含一个多匹配查询。。

     "multi_match" => [
            "query" => "Will Smith"
            "type" => "best_fields"
            "fields" => [
              "title^10",
              "description^7",
              "keywords",
              "name"
            ]
            "operator" => "and"
          ]
    

    我想为多匹配查询添加两个函数分数查询。。。 并对多匹配查询赋予更高的权重 phrase 类型以及一个对多重匹配的权重较小的查询 best_fields 类型

    我的意思是,与我搜索的关键词完全相同的文档必须具有更高的 _score

    我在bool中编写了查询和function\u分数,必须查询。。。但结果没有改变。。

    有人知道如何管理我的查询以获得更好的结果吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  4
  •   Piotr Pradzynski    7 年前

    我可以告诉你我是如何做类似的事情的。查看以下查询:

    {
      "query": {
        "bool": {
          "should": [
            {
              "multi_match": {
                "query": "SEARCH TERM HERE",
                "fields": [
                  "title^70",
                  "description^30",
                  "content^20"
                ],
                "type": "phrase",
                "boost": 100
              }
            },
            {
              "multi_match": {
                "query": "SEARCH TERM HERE",
                "fields": [
                  "title^30",
                  "description^25",
                  "content^10"
                ],
                "type": "most_fields",
                "minimum_should_match": "100%",
                "boost": 50
              }
            },
            {
              "multi_match": {
                "query": "SEARCH TERM HERE",
                "fields": [
                  "title^25",
                  "description^15",
                  "content^10"
                ],
                "type": "most_fields",
                "minimum_should_match": "50%",
                "boost": 25
              }
            },
            ...
          ]
        }
      }
    }
    

    第一 multi_match 仅当找到完整搜索短语时才匹配文档,并将整个结果提升为100。

    第二部分从搜索词中百分之百地搜索单词。因此,单词的顺序并不重要,但它们都必须出现在搜索的文档中。增压=50。

    第三部分搜索50%匹配。意味着并非所有单词都必须在文档中才能在结果中返回。增压=25。

    这个 ... 部分意味着我对剩下的结果有更多的东西。但并非每种情况都需要它。

    这个 boost 这些值是我自己在多次尝试中选择的,不可能适用于每一种情况。你必须记住,相关性的背后有一个相当复杂的算法。有关更多信息,请查看: