elasticsearch6.5.4搜索(4.复合查询)

elasticsearch6.5.4搜索(4.复合查询)

1.布尔查询

可以通过布尔查询来 装无限数量的查询,并通过下面描述的节点之一使用一个逻辑值来连接它们。

  • should:被它 装的布尔查询可能被匹配,也可能不被匹配。被匹配的should节点数目 由minimum_should_match参数控制。
  • must:被它 装的布尔查询必须被匹配,文档才会返回。
  • must_not:被它 装的布尔查询必须不被匹配,文档才会返回。

上述每个节点都可以在单个布尔查询中出现多次。这允许建立非常复杂的查询,有多个嵌套 别(在一个布尔查询中包含另一个布尔查询)。

假设我们想要找到所有这样的文档:在title字段中含有crime词条,并且year字段可以在 也可以不在1900~2000的范围里,在otitle字段中不可以包含nothing词条。用布尔查询的话, 类似于下面的代码:

{
       "query": {
           "bool": {
               "must": {
                   "term": {
                       "title": "crime"
                   }
               },
               "should": {
                   "range": {
                       "year": {
                           "from": 1900,
                           "to": 2000
                       }
                   }
               },
               "must_not": {
                   "term": {
                       "otitle": "nothing"
                   }
               }
           }
       }
   }

注意:must,should和must_not节点可以 一查询,也可以 多 个查询。

2.加权查询

加权查询封装了两个查询,并且降低其中一个查询返回文档的得分。加权查询中有三个节点 需要定义:positive部分,包含所返回文档得分不会被改变的查询;negative部分,返回的文 档得分将被降 ;negative_boost部分,包含用来降 negative部分查询得分的加权值。

加权查询的优点是,positive部分和negative部分包含的查询结果都会出现在搜索结果 中,而某些查询的得分将被降 。如果使用布尔查询的must_not节点,将得不到这样的结果。

假设我们想要一个简单的词条查询,查询title字段中含有crime词条,希望这样的文档得 分不被改变,同时要year字段在1800~1900内的文档,但这样文档的得分要有一个0.5的加权。这 样的查询如下所示:

{
	"query": {
		"boosting": {
			"positive": {
				"term": {
					"title": "crime"
				}
			},
			"negative": {
				"range": {
					"year": {
						"from": 1800,
						"to": 1900
					}
				}
			},
			"negative_boost": 0.5
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值