我正在尝试对我的ElasticSearch Server进行此查询。
{ "query" : { "match" : { "name" : "network" } }, "facets" : { "departments" : { "terms" : { "field" : "department_name" } } }, "filter" : { "bool": { "should": [ { "match" : {"department_name" : "book"}}, { "match" : {"department_name" : "electronics"}}] } } }
基本上,我希望检索名称中与“ network”匹配的所有产品,但仅过滤department_name与book或匹配的产品electronics。当我执行此查询时,我收到此错误信息。
department_name
book
electronics
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 }
我想这里的关键是QueryParsingException[[products] No filter registered for [match]],但无法理解这里出了什么问题。
QueryParsingException[[products] No filter registered for [match]]
match 是查询,而不是过滤器。
match
term在这种情况下,您可能需要-filter。
term