[Turn] combination filter

Source: Internet
Author: User

Https://es.xiaoleilu.com/080_Structured_Search/10_compoundfilters.html

Here's a complete document.

Combination Filter

The previous two examples show the use of a single filter. In reality, you might want to filter multiple values or fields, for example, would you like to express this SQL in Elasticsearch?

SELECT productFROM   productsWHERE  (price = 20 OR productID = "XHDK-A-1293-#fJ3") AND (price != 30)

In these cases, you need a bool filter. This is a combination filter with other filters as parameters, combining them into a variety of Boolean combinations.

Boolean filter

boolThe filter consists of three parts:

{   "bool" : {      "must" :     [],      "should" :   [],      "must_not" : [],   }}

must: All clauses must match, with the AND same.

must_not: All clauses must not match, with the NOT same.

should: At least one clause matches, with the OR same.

It's all right! If you need more than one filter, put them in the bool filter on the line.

Tip: bool Each part of the filter is optional (for example, you can keep only one must clause), and each section can contain one or more filters

To replicate the SQL example above, we term put two filters bool under the clause of the filter should and then use another clause to deal with the NOT condition:

GET /my_store/products/_search{   "query" : {      "filtered" : { <1> "filter" : { "bool" : { "should" : [ { "term" : {"price" : 20}}, <2> { "term" : {"productID" : "XHDK-A-1293-#fJ3"}} <2> ], "must_not" : { "term" : {"price" : 30} <3> } } } } }}

<1> Note we still need to use the filtered query to wrap all the conditions.

<2> These two term filters are sub- bool nodes of the filter, because they are placed under the should clause, so at least they have to have a condition to match.

<3> if a product value 30 , it will be automatically eliminated, because it matches the must_not clause.

Our search results returned two results, each satisfying the bool different clauses in the filter:

  "hits": [{ "_id":  "1",  "_score": 1.0, " _source ": {" price ": 10, " xhdk-a-1293-#fJ3 "<1>}}, {" _id ": " 2 ", " _score ":  "_source": { "price": 20, <2> "ProductID": "Kdke-b-9947-#kL5"}}]   

<1> Matching term FiltersproductID = "XHDK-A-1293-#fJ3"

<2> Matching term Filtersprice = 20

Nested Boolean filters

Although bool it is a combination filter and accepts sub-filters, it is necessary to understand that it is still just a filter. This means that you can nest filters in a bool filter bool , allowing you to implement more complex Boolean logic.

The following is the first SQL statement:

SELECT documentFROM   productsWHERE productID = "KDKE-B-9947-#kL5" OR ( productID = "JODL-X-1937-#pV7" AND price = 30 )

We can translate it into a pair of nested bool filters:

GET /my_store/products/_search{   "query" : {      "filtered" : {         "filter" : {            "bool" : {              "should" : [ { "term" : {"productID" : "KDKE-B-9947-#kL5"}}, <1> { "bool" : { <1> "must" : [ { "term" : {"productID" : "JODL-X-1937-#pV7"}}, <2> { "term" : {"price" : 30}} <2> ] }} ] } } } }}

<1> because term bool It is a peer in the first should clause, at least one of the filters needs to be matched.

mustthere are two lateral clauses in the <2> clause term , so they both need a match.

The result is two documents that match one clause, respectively should :

 "hits": [{ "_id":  "2",  "_score": 1.0,  "_source": { "price": 20,  "ProductID": " kdke-b-9947-#kL5 "<1>}}, {" _id ":  "3",  "_score": 1.0,  "_source": { "price": 30, <2> "ProductID": "Jodl-x-1937-#pV7" <2>}]         

<1> productID matches the bool filter in the first one term .

<2> these two fields match the bool filters in the nested term .

This is a simple example, but it shows how to use Boolean filters to construct complex logical conditions.

[Turn] combination filter

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.