【问题标题】:Boost a document based on the existence of a field根据字段的存在来提升文档
【发布时间】:2014-05-09 11:44:32
【问题描述】:

是否可以根据字段的存在来提高文档的相关性?我已经阅读了有关 function score queries 的信息,但我想知道如何考虑存在 - 据我了解,field_value_factor 适用于该字段的内容,而不是它的存在。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    函数分数查询是可能的,但是分数函数的计算量很大而且不是必需的(请记住,下面使用的exists 查询可能在 2014 年不可用)。

    可以做到以下几点:

    POST _search
    {
      "query": {
        "bool" : {
          "should" : [
            { 
              match_all: {
                "boost": 10
              } 
            },
            {
             "exists": {
               "field": "some_field_that_should_exist"
              }
            }           
          ],
          "minimum_should_match" : 2,
        }
      }
    }
    

    如果应该匹配的最小值为 2,我们说两个子句必须匹配才能使 should 子句匹配。这可以防止将提升应用于没有该字段的文档。

    【讨论】:

    • 这不是只有字段存在才匹配吗?
    【解决方案2】:

    这可以简化。 Exists 是一个常数分数查询,boost 可以直接和它一起使用。

    {  
       "query":{  
          "exists":{  
             "field":"some_field_that_should_exist",
             "boost":10
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-18
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2020-01-03
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多