且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

ElasticSearch:没有注册[match]的过滤器]

更新时间:2022-11-26 13:59:27

匹配是一个查询,而不是过滤器。



在这种情况下,可能需要术语 -filter。


I'm trying to do this query to my ElasticSearch Server.

{
    "query" : {
        "match" : {
            "name" : "network"
        }
    },
    "facets" : {
        "departments" : { 
            "terms" : {
                "field" : "department_name"
            } 
        }
    },

    "filter" : {
        "bool": {
            "should": [
                { "match" : {"department_name" : "book"}},
                { "match" : {"department_name" : "electronics"}}]            
        }   
    }
}

Basically, I wish to retrieve all the products that match "network" in its name, but filtering only to those which department_name matches either book or electronics. When I perform this query, I receive this error message.

curl -X POST "http://localhost:9200/products/_search?pretty=true" -d '{
    "query" : {
        "match" : {
            "name" : "network"
        }
    },
    "facets" : {
        "departments" : { 
            "terms" : {
                "field" : "department_name"
            } 
        }
    },

    "filter" : {
        "bool": {
            "should": [
                { "match" : {"department_name" : "book"}},
                { "match" : {"department_name" : "electronics"}}]            
        }   
    }
}
'

{
  "error" : "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[EaNRci0OSIqpA2EAPwAA6w][products][4]: SearchParseException[[products][4]: query[name:network],from[-1],size[-1]: Parse Failure [Failed to parse source [{\n    \"query\" : {\n        \"match\" : {\n            \"name\" : \"network\"\n        }\n    },\n    \"facets\" : {\n        \"departments\" : { \n            \"terms\" : {\n                \"field\" : \"department_name\"\n            } \n        }\n    },\n\n    \"filter\" : {\n        \"bool\": {\n            \"should\": [\n                { \"match\" : {\"department_name\" : \"book\"}},\n                { \"match\" : {\"department_name\" : \"electronics\"}}]            \n        }   \n    }\n}\n]]]; nested: QueryParsingException[[products] No filter registered for [match]]; }{[EaNRci0OSIqpA2EAPwAA6w][products][0]: SearchParseException[[products][0]: query[name:network],from[-1],size[-1]: Parse Failure [Failed to parse source [{\n    \"query\" : {\n        \"match\" : {\n            \"name\" : \"network\"\n        }\n    },\n    \"facets\" : {\n        \"departments\" : { \n            \"terms\" : {\n                \"field\" : \"department_name\"\n            } \n        }\n    },\n\n    \"filter\" : {\n        \"bool\": {\n            \"should\": [\n                { \"match\" : {\"department_name\" : \"book\"}},\n                { \"match\" : {\"department_name\" : \"electronics\"}}]            \n        }   \n    }\n}\n]]]; nested: QueryParsingException[[products] No filter registered for [match]]; }{[EaNRci0OSIqpA2EAPwAA6w][products][1]: SearchParseException[[products][1]: query[name:network],from[-1],size[-1]: Parse Failure [Failed to parse source [{\n    \"query\" : {\n        \"match\" : {\n            \"name\" : \"network\"\n        }\n    },\n    \"facets\" : {\n        \"departments\" : { \n            \"terms\" : {\n                \"field\" : \"department_name\"\n            } \n        }\n    },\n\n    \"filter\" : {\n        \"bool\": {\n            \"should\": [\n                { \"match\" : {\"department_name\" : \"book\"}},\n                { \"match\" : {\"department_name\" : \"electronics\"}}]            \n        }   \n    }\n}\n]]]; nested: QueryParsingException[[products] No filter registered for [match]]; }{[EaNRci0OSIqpA2EAPwAA6w][products][2]: SearchParseException[[products][2]: query[name:network],from[-1],size[-1]: Parse Failure [Failed to parse source [{\n    \"query\" : {\n        \"match\" : {\n            \"name\" : \"network\"\n        }\n    },\n    \"facets\" : {\n        \"departments\" : { \n            \"terms\" : {\n                \"field\" : \"department_name\"\n            } \n        }\n    },\n\n    \"filter\" : {\n        \"bool\": {\n            \"should\": [\n                { \"match\" : {\"department_name\" : \"book\"}},\n                { \"match\" : {\"department_name\" : \"electronics\"}}]            \n        }   \n    }\n}\n]]]; nested: QueryParsingException[[products] No filter registered for [match]]; }{[EaNRci0OSIqpA2EAPwAA6w][products][3]: SearchParseException[[products][3]: query[name:network],from[-1],size[-1]: Parse Failure [Failed to parse source [{\n    \"query\" : {\n        \"match\" : {\n            \"name\" : \"network\"\n        }\n    },\n    \"facets\" : {\n        \"departments\" : { \n            \"terms\" : {\n                \"field\" : \"department_name\"\n            } \n        }\n    },\n\n    \"filter\" : {\n        \"bool\": {\n            \"should\": [\n                { \"match\" : {\"department_name\" : \"book\"}},\n                { \"match\" : {\"department_name\" : \"electronics\"}}]            \n        }   \n    }\n}\n]]]; nested: QueryParsingException[[products] No filter registered for [match]]; }]",
  "status" : 400
}

I suppose the key here is QueryParsingException[[products] No filter registered for [match]], but cannot understand what's wrong here.

match is a query, not a filter.

You probably want the term-filter in this case.