我正在使用一个文档查找器,它输入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)...}}
}
}
}
这在某种意义上是有效的,如果它匹配第一个单词,它将比第二个单词提升得更高。然而,问题是我需要,如果它匹配第一个和第二个单词,总得分是两个过滤器的总和,而不仅仅是最高。 在上面的示例中,包含描述的文档:“空间丢失”应该高于包含“丢失”的文档。
我是否需要在脚本中对两个过滤器的分数求和?如果是这样,怎么样?
谢谢!
答案 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"
}
}
}