ElasticSearch搜索字段不需要计入得分

ElasticSearch的索引同步对物理删除的数据需要做一些对应的操作才能同步,一般都是采用状态判断是否删除,所以数据同步到es索引中,我么在查询时需要对数据的状态进行判断,同时这个条件我们不希望他会影响最终查询记录的得分,这个时候就需要用到ConstantScoreQueryBuilder构造器了。
这里写的全是后台的查询的代码。如果说想看具体的es查询语句,可以在后台打印出来对应的查询语句。
在使用ConstantScoreQueryBuilder时,我们肯定会有其他的查询条件,所以还会用到BoolQueryBuilder这个构造器,这是个复杂查询构造器,可以有多个查询条件,可以通过and或者or进行连接。

// searchSourceBuilder将查询转换为es的查询语句
 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
 // 使用BoolQueryBuilder对象(复杂查询)
 BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
  MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(keyWord, 		  "title", "description")
                    .type(MultiMatchQueryBuilder
                            .Type.BEST_FIELDS);
            // 精准匹配(不分词)
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("delete_flag", 0);
            // 使用constantScoreQuery查询不计入得分
            ConstantScoreQueryBuilder constantScoreQueryBuilder = QueryBuilders.constantScoreQuery(termQueryBuilder);
            boolQueryBuilder.must(multiMatchQueryBuilder)
                    .must(constantScoreQueryBuilder);
            searchSourceBuilder.query(boolQueryBuilder);
            searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

将两个查询条件装入boolQueryBuilder之后,在交给searchSourceBuilder 进行转换为es查询语句。这样就完成啦。
看下效果

	"query": {
		"bool": {
			"must": [{
				"multi_match": {
					"query": "测试",
					"fields": ["description^1.0", "title^1.0"],
					"type": "best_fields",
					"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
				}
			}, {
				"constant_score": {
					"filter": {
						"term": {
							"delete_flag": {
								"value": 0,
								"boost": 1.0
							}
						}
					},
					"boost": 1.0
				}
			}],
			"adjust_pure_negative": true,
			"boost": 1.0
		}
	},

must的相当于and的意思

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值