【问题标题】:How do I boost a potentially existing field in Elasticsearch?如何提升 Elasticsearch 中可能存在的字段?
【发布时间】:2018-11-08 06:20:01
【问题描述】:

我有一些 Elasticsearch 索引,在搜索时我不知道它们的映射。我使用以下内容对单词“lorem”和“ipsum”执行 AND 搜索:

GET /_search
{
    "query": {
        "query_string" : {
            "query" : "lorem AND ipsum"
        }
    }
}

这里的好处是搜索是在索引中的所有字段中执行的。现在,一些索引有一个名为“标题”的字段,我想提升这些以对这些进行更相关的排名。但当然,前提是它们存在。我尝试使用“query_string”子句的参数,但我能够提升“title”字段的唯一方法是使用以下查询:

GET /_search
{
    "query": {
        "query_string" : {
            "fields": ["title^2"],
            "query" : "lorem AND ipsum"
        }
    }
}

这会导致“query_string”子句只搜索“title”字段而不搜索其他字段 - 请记住,我不知道这些其他字段是什么。在“default_field”参数中使用通配符只有与“fields”参数一起使用才会导致异常。

所以基本上我想告诉 Elasticsearch:

搜索“lorem”和“ipsum”,如果找到,则将结果排名更高 他们在一个名为“标题”的字段中

我将如何实现这样的目标?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    虽然“field_value_factor”是一条死胡同,但“function_score”引导我走向正确的方向。这是我(原则上)最终使用的查询:

    GET /_search
    {
        "query": {
            "function_score": {
                "query": {
                    "query_string": {
                        "query": "lorem AND ipsum"
                    }
                },
                "functions": [
                    {
                        "filter": {
                            "query_string": {
                                "fields": ["name"],
                                "query": "lorem AND ipsum"
                            }
                        },
                        "weight": 2
                    }
                ]
            }
        }
    }
    

    它将在所有索引中的所有字段中搜索“lorem”和“ipsum”这两个词,如果这些词都在名为“name”的字段中找到,则搜索命中的分数会加倍。

    【讨论】:

      【解决方案2】:

      我想你要找的是function_score

      GET /_search
      {
          "query": {
              "function_score": {
                  "field_value_factor": {
                      "field": "title",
                      "factor": "2",
                      "modifier": "multiply",
                      "missing": 1
                  }
              }
          }
      }
      

      【讨论】:

      • 看起来很有希望,但是您如何将其合并到我的问题中的示例查询中?能否请您显示完整的查询?
      • 根据我在尝试阅读 field_value_factor 函数后的理解是,它用于通过特定字段的值来提升查询,而不是提升字段本身。所以这似乎无济于事。
      猜你喜欢
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2013-03-02
      • 2013-12-24
      • 2014-09-13
      相关资源
      最近更新 更多