【问题标题】:Elasticsearch rescore all results ignoring base scoreElasticsearch 重新评分所有结果,忽略基本分数
【发布时间】:2015-01-12 21:52:10
【问题描述】:

我正在尝试使用以下查询重新评分我的结果:

POST /archive/item/_search
{
    "query": {
        "multi_match": {
            "fields": ["title", "description"],
            "query": "1 złoty",
            "operator": "and"
        }
    },
    "rescore": {
        "window_size": 50,
        "query": {
            "rescore_query": {
                "multi_match": {
                    "type": "phrase",
                    "fields": ["title", "description"],
                    "query": "1 złoty",
                    "slop": 10
                }
            },
            "query_weight": 0,
            "rescore_query_weight": 1
        }
    }
}

我这样做是因为我想主要通过距离来得分。 另外,我想忽略源字段长度对分数的影响。 我这样做对吗?如果不是,这里的最佳做法是什么?

还有第二个问题。为什么还是需要window_size? 我不只想要最好的结果。 主查询 atcs 就像一个过滤器,所以它返回的所有结果都是相关的。 我怀疑像 "window_size": "all" 这样的东西会很完美,但我在文档中找不到任何东西。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    要回答您的第二个问题,之所以需要它,是因为它旨在仅用于获得最佳结果。基本上这是一个成本问题 - 假设辅助算法更昂贵,因此它仅设计用于在最佳结果上运行。这里有更多关于这个的讨论:

    https://github.com/elasticsearch/elasticsearch/issues/2640

    这里:

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-rescore.html

    我个人认为“全部”选项是个好主意,也许你应该在 github 上打开一个问题?

    【讨论】:

      【解决方案2】:

      如果您想通过邻近匹配来得分,所有其他过滤器返回的结果都应该这样做:

      {
        "query": {
          "filtered" : {
            "query" : {
              "multi_match": {
                "type": "phrase",
                "fields": ["title", "description"],
                "query": "1 złoty",
                "slop": 10
              }
            },
            "filter" : {
              "query": {
                "multi_match": {
                  "fields": ["title", "description"],
                  "query": "1 złoty",
                  "operator": "and"
                }
              }
            }
          }
        }
      }
      

      根据this,过滤器在查询之前运行,所以性能应该也不错。更重要的是,您不会得分两次,因为过滤器不计算分数。另一个优点是可以缓存过滤器,这应该会显着加快速度。

      请记住,我只进行了简短的测试,主要关注语法而不是结果。您可能需要仔细检查一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多