elasticsearch排序不使用partial_fields

时间:2014-05-16 06:41:46

标签: elasticsearch

我有这种:

"sort": [
    {
        "_script": {
            "script": "return doc.score*10 + doc['field2'].value",
            "type": "number",
            "order": "asc"
        }
    }
]

部分字段:

"filter": {
        "partial_fields": {
            "fields": {
                "exclude": [
                    "field5*"
                ]
            }
        }
    }

问题是如果设置了partial_fields,排序不起作用..这有什么原因吗?或者我如何删除partial_fields以使排序工作?

这是整个查询:

{
"size": 10,
"query": {
    "filtered": {
        "query": {
            "bool": {
                "should": [
                    {
                        "text": {
                            "name_en": {
                                "query": "testing",
                                "operator": "or",
                                "boost": 20
                            }
                        }
                    }
                ]
            }
        },
        "filter": {
            "and": [
                {
                    "term": {
                        "_type": "test"
                    }
                }
            ]
        }
    },
    "filter": {
        "partial_fields": {
            "fields": {
                "exclude": [
                    "field2*"
                ]
            }
        }
    }
},
"sort": [
    {
        "_script": {
            "script": "return doc.score*1000 + doc['field2'].value",
            "type": "number",
            "order": "asc"
        }
    }
]
}

感谢。

1 个答案:

答案 0 :(得分:1)

根据documentation for partial fields,我没有看到使用嵌套在JSON请求中的filter节点下。我认为这可能是您的问题,请尝试将partial_fields部分移至与sort相同的级别,如下所示:

{
"size": 10,
"query": {
    "filtered": {
        "query": {
            "bool": {
                "should": [
                    {
                        "text": {
                            "name_en": {
                                "query": "testing",
                                "operator": "or",
                                "boost": 20
                            }
                        }
                    }
                ]
            }
        },
        "filter": {
            "and": [
                {
                    "term": {
                        "_type": "test"
                    }
                }
            ]
        }
    }    
},
"partial_fields": {
       "fields": {
           "exclude": [
               "field2*"
           ]
       }
},
"sort": [
    {
        "_script": {
            "script": "return doc.score*1000 + doc['field2'].value",
            "type": "number",
            "order": "asc"
        }
    }
]
}