Elasticsearch must_not过滤器不适用于大量值

时间:2016-02-04 19:27:13

标签: elasticsearch

我有下一个包含一些过滤器的查询:

    {
        "from": 0,
        "query": {
            "function_score": {
                "query": {
                    "filtered": {
                        "filter": {
                            "bool": {
                                "must": [
                                    {
                                        "term": {
                                            "idpais": [
                                                115
                                            ]
                                        }
                                    },
                                    {
                                        "term": {
                                            "tipo": [
                                                1
                                            ]
                                        }
                                    }
                                ],
                                "must_not": [
                                    {
                                        "term": {
                                            "idregistro": [
                                                5912471,
                                                3433876,
                                                9814443,
                                                11703069,
                                                6333176,
                                                8288242,
                                                9924922,
                                                6677850,
                                                11852501,
                                                12530205,
                                                4703469,
                                                12776479,
                                                12287659,
                                                11823679,
                                                12456304,
                                                12777457,
                                                10977614,
                                                ...
                                            ]
                                        }
                                    }
                                ]
                            }
                        },
                        "query": {
                            "bool": {
                                "should": [
                                    {
                                        "match_phrase": {
                                            "area": "Coordinator"
                                        }
                                    },
                                    {
                                        "match_phrase": {
                                            "company": {
                                                "boost": 5,
                                                "query": "IBM"
                                            }
                                        }
                                    },
                                    {
                                        "match_phrase": {
                                            "topic": "IT and internet stuff"
                                        }
                                    },
                                    {
                                        "match_phrase": {
                                            "institution": {
                                                "boost": 5,
                                                "query": "University of my city"
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    }
                },
                "script_score": {
                    "params": {
                        "idpais": 115,
                        "idprovincia": 0,
                        "relationships": []
                    },
                    "script_id": "ScoreUsuarios"
                }
            }
        },
        "size": 24,
        "sort": [
            {
                "_script": {
                    "order": "desc",
                    "script_id": "SortUsuarios",
                    "type": "number"
                }
            }
        ]
    }

must_not过滤器有很多要排除的值(大约200个值),但看起来像elasticsearch忽略这些值并且它包含在结果集上。如果我尝试仅设置几个值(10到20个值),则elasticsearch应用must_not过滤器。

对过滤器中的值数量存在一些限制吗?存在一些从查询中删除大量结果的方法吗?

1 个答案:

答案 0 :(得分:0)

computer_set用于传递不是terms query的值列表。您必须在term query中使用它,如下所示。

must filter