累加多个单词过滤的分数

时间:2013-10-11 18:58:55

标签: elasticsearch

我正在使用一个文档查找器,它输入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)...}}
    }
} 
}

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

我是否需要在脚本中对两个过滤器的分数求和?如果是这样,怎么样?

谢谢!

1 个答案:

答案 0 :(得分:0)

你能使用elasticsearch 0.90.4吗?如果是这样,则不推荐使用custom_filters_score并将其替换为[function score query] [1]:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

使用功能得分查询,您可以指定要对得分求和:

{
  "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"
    }
  } 
}