1

我正在使用一个文档查找器,它输入 N 个单词,并且应该搜索所有这些 N 个单词命中同一列。这 N 个单词是有序的,如果第一个和第二个单词匹配不同的文档,则与第一个单词匹配的文档需要更高的分数。到目前为止,我有这个:

{
"from": 0, 
"query": {
    "custom_filters_score": {
        "filters": [
            {
                "boost": 10, 
                "filter": {
                    "term": {
                        "descripcion": "lost"
                    }
                }
            }, 
            {
                "boost": 9, 
                "filter": {
                    "term": {
                        "format": "in"
                    }
                }
            }
        ], 
    "query":{...(mandatory conditions regardless of the search pattenrs)...}}
    }
} 
}

从某种意义上说,这很有效,如果它匹配第一个单词,它将比第二个单词提升得更高。但是,问题是我需要如果它同时匹配第一个和第二个单词,则总得分是两个过滤器的总和,而不仅仅是最高的。在上面的示例中,包含描述的文档:“lost in space”的得分应该高于包含“lost”的文档。

我是否需要将脚本中两个过滤器的分数相加?如果是这样,怎么做?

谢谢!

4

1 回答 1

0

你可以使用elasticsearch 0.90.4吗?如果是这样,custom_filters_score 已被弃用并被 [功能分数查询] [1] 取代:http ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

使用函数 score 查询,您可以指定应该对分数求和:

{
  "from": 0, 
  "query": {
    "function_score": {
        "functions" : [
            {
                "boost": 10, 
                "filter": {
                    "term": {
                        "descripcion": "lost"
                    }
                }
            }, 
            {
                "boost": 9, 
                "filter": {
                    "term": {
                        "format": "in"
                    }
                }
            }
        ], 
        "query":{...(mandatory conditions regardless of the search pattenrs)...},
        "score_mode" : "sum"
    }
  } 
}
于 2013-10-12T02:38:52.370 回答