官术网_书友最值得收藏!

Searching with multiple conditions

Often, we find ourselves in a position where we need to search with more than one criterion, where each of these criteria could be expressed as an inpidual query. In this section, let's see how we can make such a combination of search.

One simple way to express multiple search criteria is using a bool query. The bool query lets you use a combination of other queries, where each of the conditions can be put using a Boolean clause. There are three Boolean clauses:

  • must
  • should
  • must_not

The must clause suggests that the constituent query must appear in the matching documents. If there is no must clause in the query, a combination of should clauses can be given. Also, you may set the minimum number of should clauses that should be matched. As the name indicates, must_not means that this clause should not match the document.

Let's see how we can use the bool query in Elasticsearch:

{
    "bool" : {
        "must" : [{
            "term" : { "productType" : "Laptop " }
        }],
        "must_not" : {
            "range" : {
                "dateOfManufactoring" : { "from" : 1990/01/01, "to" : 2014/01/01 }
            }
        },
        "should" : [
            {
                "term" : { "color" : "yellow" }
            },
            {
                "term" : { "description" : "lenovo" }
            }
        ],
        "minimum_should_match" : 1,
        "boost" : 1.0
    }
}   

Here, we used a bool query to select all the laptops whose date of manufacturing is not between 1999 to 2014. Then, we boosted the laptops that were of the color yellow or were from lenovo.

Note

If there is at least one must query, then none of the should queries need to match a document to qualify that document as a result. In this case, the should query match will increase the relevance of that document.

主站蜘蛛池模板: 延津县| 介休市| 普格县| 余庆县| 大安市| 若尔盖县| 云和县| 雷波县| 革吉县| 舟山市| 鄯善县| 沿河| 临江市| 通河县| 平邑县| 红安县| 革吉县| 邻水| 宜州市| 上林县| 聂拉木县| 延川县| 和静县| 浑源县| 开鲁县| 四子王旗| 青海省| 肃北| 威海市| 祁门县| 阜南县| 嘉黎县| 海口市| 安图县| 镇坪县| 南汇区| 台南县| 长沙市| 西丰县| 洛阳市| 耿马|