delete-by-query和复合查询
创始人
2024-02-16 07:51:43
0

根据term,match等查询方式去删除大量的文档

Ps:如果你需要删除的内容,是index下的大部分数据,推荐创建一个全新的index,将保留的文档内容,添加到全新的索引

# delete-by-query
POST /sms-logs-index/sms-logs-type/_delete_by_query
{"query": {"range": {"fee": {"lt": 4}}}
}

 

// Java代码实现
@Test
public void deleteByQuery() throws IOException {//1. 创建DeleteByQueryRequestDeleteByQueryRequest request = new DeleteByQueryRequest(index);request.types(type);//2. 指定检索的条件    和SearchRequest指定Query的方式不一样request.setQuery(QueryBuilders.rangeQuery("fee").lt(4));//3. 执行删除BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT);//4. 输出返回结果System.out.println(resp.toString());}

复合查询

bool查询

复合过滤器,将你的多个查询条件,以一定的逻辑组合在一起。

  • must: 所有的条件,用must组合在一起,表示And的意思

  • must_not:将must_not中的条件,全部都不能匹配,标识Not的意思

  • should:所有的条件,用should组合在一起,表示Or的意思

# 查询省份为武汉或者北京
# 运营商不是联通
# smsContent中包含中国和平安
# bool查询
POST /sms-logs-index/sms-logs-type/_search
{"query": {"bool": {"should": [{"term": {"province": {"value": "北京"}}},{"term": {"province": {"value": "武汉"}}}],"must_not": [{"term": {"operatorId": {"value": "2"}}}],"must": [{"match": {"smsContent": "中国"}},{"match": {"smsContent": "平安"}}]}}
}

 

// Java代码实现Bool查询
@Test
public void BoolQuery() throws IOException {//1. 创建SearchRequestSearchRequest request = new SearchRequest(index);request.types(type);//2. 指定查询条件SearchSourceBuilder builder = new SearchSourceBuilder();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();// # 查询省份为武汉或者北京boolQuery.should(QueryBuilders.termQuery("province","武汉"));boolQuery.should(QueryBuilders.termQuery("province","北京"));// # 运营商不是联通boolQuery.mustNot(QueryBuilders.termQuery("operatorId",2));// # smsContent中包含中国和平安boolQuery.must(QueryBuilders.matchQuery("smsContent","中国"));boolQuery.must(QueryBuilders.matchQuery("smsContent","平安"));builder.query(boolQuery);request.source(builder);//3. 执行查询SearchResponse resp = client.search(request, RequestOptions.DEFAULT);//4. 输出结果for (SearchHit hit : resp.getHits().getHits()) {System.out.println(hit.getSourceAsMap());}
}

boosting查询

boosting查询可以帮助我们去影响查询后的score。

  • positive:只有匹配上positive的查询的内容,才会被放到返回的结果集中。

  • negative:如果匹配上和positive并且也匹配上了negative,就可以降低这样的文档score。

  • negative_boost:指定系数,必须小于1.0

关于查询时,分数是如何计算的:

  • 搜索的关键字在文档中出现的频次越高,分数就越高

  • 指定的文档内容越短,分数就越高

  • 我们在搜索时,指定的关键字也会被分词,这个被分词的内容,被分词库匹配的个数越多,分数越高

 原本10分,negative了,就成了3分

 

# boosting查询  收货安装
POST /sms-logs-index/sms-logs-type/_search
{"query": {"boosting": {"positive": {"match": {"smsContent": "收货安装"}},"negative": {"match": {"smsContent": "王五"}},"negative_boost": 0.5}}
}
// Java实现Boosting查询
@Test
public void BoostingQuery() throws IOException {//1. 创建SearchRequestSearchRequest request = new SearchRequest(index);request.types(type);//2. 指定查询条件SearchSourceBuilder builder = new SearchSourceBuilder();BoostingQueryBuilder boostingQuery = QueryBuilders.boostingQuery(QueryBuilders.matchQuery("smsContent", "收货安装"),QueryBuilders.matchQuery("smsContent", "王五")).negativeBoost(0.5f);builder.query(boostingQuery);request.source(builder);//3. 执行查询SearchResponse resp = client.search(request, RequestOptions.DEFAULT);//4. 输出结果for (SearchHit hit : resp.getHits().getHits()) {System.out.println(hit.getSourceAsMap());}
}

相关内容

热门资讯

公牛集团已起诉家的公司,向其索... 此前,广东中山市家的电器有限公司(以下简称“家的公司”)多个销售人员在社交平台发布视频称,公牛集团的...
曾揭露硅谷惊天骗局 《纽约时报... 凤凰网科技讯 北京时间12月23日,据路透社报道,当地时间周一,《纽约时报》调查记者约翰·卡雷鲁(J...
民生银行烟台分行开展法律风险典... 为切实增强全行员工的法律意识,推动业务合规稳健发展,民生银行烟台分行开展了2025年法律风险典型案例...
久祺股份:立足杭州试点城市优势... 证券之星消息,久祺股份(300994)12月22日在投资者关系平台上答复投资者关心的问题。 投资者提...
蜂蜜农残超标,谁担责?检察机关... 违规使用农药致蜜蜂大量死亡 蜂蜜农残超标 检察机关依法对主管部门提起行政公益诉讼 12月22日,最高...
哈尔滨靠谱刑事律师服务推荐:黑... 在面对刑事法律问题时,选择一位靠谱、专业的刑事辩护律师至关重要。那么,刑事律师服务哪家靠谱?刑事辩护...
一次性征信修复政策落地 羊城晚报讯 记者戴曼曼报道:22日,中国人民银行官网发布《关于实施一次性信用修复政策有关安排的通知》...
海昌海洋公园:董事会主席俞发祥... 北京商报讯(记者 吴其芸)12月22日晚,海昌海洋公园发布公告称,海昌海洋公园收到公司董事会主席、执...