赞
踩
我们可能会想,“只过滤搜索结果,不过滤聚合结果呢?” 答案是使用 post_filter 。
它是接收一个过滤器的顶层搜索请求元素。这个过滤器在查询 之后 执行(这正是该过滤器的名字的由来:它在查询之后 post 执行)。正因为它在查询之后执行,它对查询范围没有任何影响,所以对聚合也不会有任何影响。
{ "from": 0, "size": 10, "query": { "bool": { "must": [ { "bool": { "must": [ { "multi_match": { "query": "期刊", "fields": [ "eissn^1.0", "name^1.0", "pissn^1.0", "publisherName^1.0" ], "type": "phrase", "operator": "OR", "slop": 0, "prefix_length": 0, "max_expansions": 50, "zero_terms_query": "NONE", "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } } ], "adjust_pure_negative": true, "boost": 1.0 } } ], "adjust_pure_negative": true, "boost": 1.0 } }, "version": true, "explain": false, "_source": { "includes": [ "name", "eissn", "pissn", "publisherName", "id", "language", "subject" ], "excludes": [] }, "sort": [ { "name.raw": { "order": "asc" } } ], "aggregations": { "language": { "terms": { "field": "language.raw", "size": 10, "min_doc_count": 1, "shard_min_doc_count": 0, "show_term_doc_count_error": false, "order": [ { "_count": "asc" }, { "_key": "asc" } ] } }, "publisherName": { "terms": { "field": "publisherName.raw", "size": 10, "min_doc_count": 1, "shard_min_doc_count": 0, "show_term_doc_count_error": false, "order": [ { "_count": "desc" }, { "_key": "asc" } ] } } } }
DSL查询语句目前共包含一个query查询条件和两个聚合项,检索结果如下:
原有的DSL语句增加post_filter
"post_filter": { "bool": { "filter": [ { "match_phrase": { "publisherName": { "query": "中国社科院", "slop": 0, "zero_terms_query": "NONE", "boost": 1.0 } } } ], "adjust_pure_negative": true, "boost": 1.0 } }
检索结果如下,聚合项并未改变,检索出来的记录在执行完查询后通过post_filter又过滤了一遍
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。