function_score:将缺失的字段视为完美命中

时间:2017-02-17 09:16:45

标签: elasticsearch elasticsearch-5

我需要做的是按位置提升文档(越接近越好)。 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> <div ng-app="myApp" ng-controller="customersCtrl"> <div class="form-group"> <label class="control-label col-md-3">Title</label> <div class="col-md-6"> <input type="text" name="title" class="form-control" ng-model="title"> </div> </div> <table> <tr ng-repeat="data in result.data"> <td> {{$index + 1}} </td> <td> {{ data._id }} </td> <td> {{ data.title}} </td> <td> {{ data.category.label }} </td> <td> {{ data.user.name }} </td> <td width="20%"> <button type="button" class="btn btn-primary" ng-click="getData(data)"><i class="fa fa-edit"></i> Edit</button> <button type="button" class="btn btn-danger"><i class="fa fa-trash"></i> Delete</button> </td> </tr> </table> <button type="button" class="btn btn-primary" ng-click="save()"><i class="fa fa-edit"></i> Save</button> </div>是嵌套类型。

正常工作如果文档中缺少locations,Elasticsearch不会返回文档。如果缺少字段,Elasticsearch应将文档视为完美匹配。知道如何实现这个目标吗?

我的查询:

locations

BTW:我使用的是Elasticsearch 5.0

1 个答案:

答案 0 :(得分:1)

在函数部分再添加一个function,其中包含高升压(如1000),以便丢失locations,如下所示:

{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "locations"
                }
            }
        },
    },
    "weight": 1000
}

因此,由于体重过高,缺少locations的记录将首先出现。

语法可以略有不同。有关查询的更多信息:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html