【问题标题】:ElasticSearch result sorting (relevant score) based on certain field (boosting)基于特定字段的 ElasticSearch 结果排序(相关分数)(提升)
【发布时间】:2019-09-23 18:37:34
【问题描述】:

我使用 ElasticSearch 6.6。我的应用程序通过从不同数据源中提取数据来构建 ES 索引。搜索未指定数据源。它只是构建一个查询,例如:

GET employerdata/_search
{ 
  "query": 
  { 
    "bool": {
      "must": [
          {  "match" : {"name" : {
        "query": "WALMART",
        "fuzziness": "3"
      }}},
          {  "match" : {"state" : "TX"}}
        ]
    } 
  }

}

有一个名为“dataSource”的字段。但是,它不用于构建查询。然而,它是结果的一部分。基本上,我想在构建查询时隐式地使用这个字段。例如,如果文档的“dataSource”等于“A”,那么文档应该位于结果集的顶部。换句话说,我想根据“dataSource”字段提高分数。但是,即使文档是来自其他“数据源”(例如“B”)的索引,我仍然想得到结果。

【问题讨论】:

  • 很高兴能回复我们的答案...

标签: elasticsearch


【解决方案1】:

在@apt-get_install_skill 答案之上添加。如果在查询时需要提升而不是索引。你可以使用function_score

GET employer/_search
{
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "filter": {
            "match": {
              "dataSource": "B"
            }
          },
          "weight": 2
        }
      ]
    }
  }
}

【讨论】:

  • 感谢 jaspreet chahal 的提示。我能够通过构建一个如下所示的查询来完成它:
【解决方案2】:

查看可以添加到查询 (https://www.elastic.co/guide/en/elasticsearch/reference/6.6/mapping-boost.html) 的 boost-parameter。您将此提升设置为字段的某些值(例如 dataSource = A)。这不是过滤器(仍会返回 dataSource = B),但它增加了与查询匹配的特定文档的相关性。

【讨论】:

    【解决方案3】:
    GET employerdata/_search
    { 
     "query": 
     { 
    "function_score": {
      "query": {"bool": {
      "must": [
          {  "match" : {"beName" : {
        "query": "KROGER",
        "fuzziness": "3"
      }}},
          {  "match" : {"beZip" : "47119"}}
        ]
    } },
      "functions": [
        { "filter": {"match": {"dataSource" : "eeo1"}},
          "random_score": { },
          "weight": 25
        }
      ]
    } 
    

    }

    }

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2017-06-16
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      相关资源
      最近更新 更多