网站建设 技术架构,工程信息价查询,flash企业网站,wordpress免费企模板包含当前es所有的查询#xff0c;
需要什么代码直接照搬#xff0c;改个参数就行#xff01;
用的好请务必给我点赞#xff01;#xff01;#xff01;感谢爱你们#xff01;#xff01;#xff01;
#xff08;周末更 筒#xff09; 为啥写这篇文章呢#xff…
包含当前es所有的查询
需要什么代码直接照搬改个参数就行
用的好请务必给我点赞感谢爱你们
周末更 筒 为啥写这篇文章呢
大概是因为目前公司用的api跟以前的不太一样
以前我们是基于高标准客户端直接做的
但是目前这边同事是基于ElasticsearchRestTemplate跟NativeSearchQuery做的。 import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.common.lucene.search.function.CombineFunction;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchAllQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.index.query.TermsQueryBuilder;
import org.elasticsearch.index.query.WildcardQueryBuilder;
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilder;
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;Slf4j
RestController
RequestMapping(/v/k/t/query)
public class EsTestController {/*** 测试es各种查询方法**/AutowiredElasticsearchRestTemplate elasticsearchRestTemplate;//通配符查询PostMapping(/es/wildcard)public void wildcard() {//*匹配任意数量的字符包括零个字符。 *x*: 对x做前后N位做模糊查询,前后有多少值都可以查到(也可以左模糊或者右模糊)//?:用于匹配单个字符. user?a: user?a 匹配user1a,但不匹配user123a//^:必须以某个字符开头如^user*必须以user开头//$:必须以某个字符结尾如user$必须以user结尾BoolQueryBuilder boolQueryBuilder QueryBuilders.boolQuery();//wildcardQuery通配符查询WildcardQueryBuilder bsVersion QueryBuilders.wildcardQuery(bsVersion, *1*);WildcardQueryBuilder bsVersion2 QueryBuilders.wildcardQuery(type, *j*);boolQueryBuilder.must(bsVersion).should(bsVersion2);NativeSearchQuery dsl new NativeSearchQueryBuilder()}//高亮//默认情况下只能对查询字段高亮//加了.requireFieldMatch(false) 可以对非查询字段高亮具体看下文PostMapping(/es/highlight)public void highlight() {BoolQueryBuilder boolQueryBuilder QueryBuilders.boolQuery();//wildcardQuery通配符查询WildcardQueryBuilder bsVersion QueryBuilders.wildcardQuery(bsVersion, *1*);WildcardQueryBuilder bsVersion2 QueryBuilders.wildcardQuery(type, *j*);boolQueryBuilder.must(bsVersion).should(bsVersion2);NativeSearchQuery dsl new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withHighlightFields(//.requireFieldMatch(false) : 加了可以对非查询字段高亮new HighlightBuilder.Field(bsVersion).preTags(em).postTags(/em).requireFieldMatch(false),new HighlightBuilder.Field(provinceNameCn).preTags(em).postTags(/em).requireFieldMatch(false),new HighlightBuilder.Field(isp).preTags(em).postTags(/em).requireFieldMatch(false),new HighlightBuilder.Field(type).preTags(em).postTags(/em).requireFieldMatch(false),new HighlightBuilder.Field(agentId).preTags(em).postTags(/em).requireFieldMatch(false)).build();SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {// 高亮字段是个大MAP 高亮字段集合 {bsVersion[em115/em]} //K字段名 V高亮了的数据集合MapString, ListString highlightFields searchHit.getHighlightFields();System.out.println(获取高亮字段集合bsVersion highlightFields.get(bsVersion));System.out.println(获取高亮字段集合provinceNameCn highlightFields.get(provinceNameCn));System.out.println(获取高亮字段集合isp highlightFields.get(isp));System.out.println(获取高亮字段集合type highlightFields.get(type));System.out.println(获取高亮字段集合agentId highlightFields.get(agentId));ListString bsVersionResult highlightFields.get(bsVersion);for (String s : bsVersionResult) {System.out.println(bsVersion集合每一个值为 s);}// highlightFields.forEach((k, v) - {
// //获取高亮字段k bsVersion v [em115/em]
// System.out.println(获取高亮字段k k v v);
// });}log.info(总条数{}, search.getTotalHits());System.out.println(search.getSearchHits().size() search.getSearchHits().size());}//排序PostMapping(/es/sort)public void sort() {MatchAllQueryBuilder matchAllQuery QueryBuilders.matchAllQuery();//备注这里用的是NativeSearchQueryBuilderxxxBuilder。最后一定要.build();不然条件用不了NativeSearchQuery dsl new NativeSearchQueryBuilder().withQuery(matchAllQuery)//备注应该是要keywordpaasword这一类才能排序。我用text类型排序报非法字段异常.withSorts(SortBuilders.fieldSort(appId).order(SortOrder.ASC)) //排序根据bsVersion升序排序.build();SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//分页PostMapping(/es/page)public void page() {Integer page 1;Integer size 10;MatchAllQueryBuilder matchAllQuery QueryBuilders.matchAllQuery();NativeSearchQuery dsl new NativeSearchQuery(matchAllQuery);//分页Pageable pageable PageRequest.of((page - 1) * size, size);dsl.setPageable(pageable);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());// 获取当前页数log.info(当前页数{}, page);// 获取当前页的条数int currentSize search.getSearchHits().size();log.info(当前页条数{}, currentSize);//数据列表search.getSearchHits() for出每一条然后加到list中for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//布尔查询PostMapping(/es/boolQueryBuilder)public void boolQueryBuilder() {BoolQueryBuilder boolQueryBuilder QueryBuilders.boolQuery();//must 必须满足且参与算分boolQueryBuilder.must(QueryBuilders.matchQuery(bsVersion, 114));//mustNot 必须不满足 appID 300-700之间不参与查询就是直接筛掉了boolQueryBuilder.mustNot(QueryBuilders.rangeQuery(appId).gte(300).lte(700));//filter 必须满足且不参与算分
// boolQueryBuilder.filter(QueryBuilders.termQuery(agentId, 298_ead348abbaf30f48));NativeSearchQuery dsl new NativeSearchQuery(boolQueryBuilder);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//算分函数查询PostMapping(/es/FunctionScoreQueryBuilder)public void FunctionScoreQueryBuilder() {FunctionScoreQueryBuilder functionScoreQueryBuilder QueryBuilders.functionScoreQuery(//原始查询QueryBuilders.matchAllQuery(),//算分数组new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{//第一个元素new FunctionScoreQueryBuilder.FilterFunctionBuilder(//过滤器QueryBuilders.matchQuery(bsVersion, 114),//权重ScoreFunctionBuilders.weightFactorFunction(10)),//第二个元素new FunctionScoreQueryBuilder.FilterFunctionBuilder(//过滤器QueryBuilders.matchQuery(bsVersion, 115),//权重ScoreFunctionBuilders.weightFactorFunction(10))}).boostMode(CombineFunction.REPLACE);NativeSearchQuery dsl new NativeSearchQuery(functionScoreQueryBuilder);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//范围查询PostMapping(/es/rangeQuery)public void rangeQuery() {//范围查询 appId字段 0 200 的数据RangeQueryBuilder rangeQueryBuilder QueryBuilders.rangeQuery(appId).gte(0).lte(200);NativeSearchQuery dsl new NativeSearchQuery(rangeQueryBuilder);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//精确查询PostMapping(/es/termQuery)public void termQuery() {//根据isp字段 精确查询 内网IPTermsQueryBuilder termsQueryBuilder QueryBuilders.termsQuery(isp, 内网IP );NativeSearchQuery dsl new NativeSearchQuery(termsQueryBuilder);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//多字段查询PostMapping(/es/multiMatchQuery)public void multiMatchQuery() {//备注字段必须是text类型可以分词类型//查找keyword、数值、日期、boolean等会报错//如果放入精确类型的字段会报错MultiMatchQueryBuilder multiMatchQuery QueryBuilders.multiMatchQuery(114, bsVersion, type);//查询114根据bsVersion,typeNativeSearchQuery dsl new NativeSearchQuery(multiMatchQuery);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//单字段查询PostMapping(/es/matchQuery)public void matchQuery() {MatchQueryBuilder matchQuery QueryBuilders.matchQuery(bsVersion, 114);NativeSearchQuery dsl new NativeSearchQuery(matchQuery);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档的原数据 searchHit.getContent());System.out.println(单条文档的id searchHit.getId());System.out.println(单条文档的评分 searchHit.getScore());System.out.println(单条文档索引名表名 searchHit.getIndex());//298_ops-web-js_1就是你输入的索引库名}}//查询所有PostMapping(/es/matchAllQuery)public void matchAllQuery() {MatchAllQueryBuilder matchAllQuery QueryBuilders.matchAllQuery();NativeSearchQuery dsl new NativeSearchQuery(matchAllQuery);SearchHitsMap search elasticsearchRestTemplate.search(dsl, Map.class, IndexCoordinates.of(298_ops-web-js_1));log.info(总条数{}, search.getTotalHits());log.info(查询原始对象{}, search.getSearchHits());log.info(分数值{}, search.getMaxScore());log.info(有无聚合{}, search.hasAggregations());log.info(返回搜索命中数量的关系例如精确值、估计值{}, search.getTotalHitsRelation());log.info(判断是否存在搜索命中结果{}, search.hasSearchHits());//原始结果的每一条数据for (SearchHitMap searchHit : search.getSearchHits()) {System.out.println(单条文档 searchHit);System.out.println(单条文档的原数据 searchHit.getContent());}}}————————————————————————————————————