Elasticsearch常见搜索方法的实现
拼装搜索请求参数(SearchRequest)
创建参数存储对象(SearchSourceBuilder)
拼装搜索条件(QueryBuilders)
match_all : 查询全部
match
term
range
geodistance
bool
MatchAllQueryBuilder query = QueryBuilders.matchAllQuery(); sourceBuilder.query(query);// 把搜索条件存入参数对象中 // 拼装搜索条件-模糊全部 // 参数1:搜索的字段名称 // 参数2:搜索的关键字 MatchQueryBuilder query = QueryBuilders.matchQuery("name", "上海外滩"); sourceBuilder.query(query);// 把搜索条件存入参数对象中 // 参数2:搜索的字段名称 // 参数1:搜索的关键字 MultiMatchQueryBuilder query = QueryBuilders.multiMatchQuery("福华路广场","name","address"); // 参数1:搜索的字段名称 // 参数2:搜索的关键字 TermQueryBuilder query = QueryBuilders.termQuery("brand", "7天酒店"); RangeQueryBuilder query = QueryBuilders.rangeQuery("price").gte(10).lte(159); // bool查询 BoolQueryBuilder query = QueryBuilders.boolQuery(); MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", "如家"); query.must(matchQuery); RangeQueryBuilder priceQuery = QueryBuilders.rangeQuery("price").gte(400); query.mustNot(priceQuery); GeoDistanceQueryBuilder locationQuery = QueryBuilders.geoDistanceQuery("location").distance(10, DistanceUnit.KILOMETERS).point(31.21, 121.5); query.filter(locationQuery);
function_score
// ========================= 拼装广告置顶的搜索条件 FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[1]; TermQueryBuilder adQuery = QueryBuilders.termQuery("isAD", true); WeightBuilder weightBuilder = ScoreFunctionBuilders.weightFactorFunction(10);
// 参数1:过滤条件 adQuery // 参数2:分值策略
weightBuilder filterFunctionBuilders[0] = new FunctionScoreQueryBuilder.FilterFunctionBuilder(adQuery,weightBuilder);
// 参数1:查询条件 query // 参数2:分值修改函数
FunctionScoreQueryBuilder functionScoreQuery = QueryBuilders.functionScoreQuery(query,filterFunctionBuilders); functionScoreQuery.boostMode(CombineFunction.MULTIPLY);
sourceBuilder.query(functionScoreQuery);
- 拼装分页条件// 分页参数int page = 2;int size = 10;sourceBuilder.size(size);sourceBuilder.from((page-1)*size);
// 分页参数\ int page = 2; int size = 10; sourceBuilder.size(size); sourceBuilder.from((page-1)*size);
- 拼装排序条件```javasourceBuilder.sort("price", SortOrder.DESC);sourceBuilder.sort("score", SortOrder.DESC);
拼装高亮条件
// 高亮条件 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("name"); highlightBuilder.preTags("<b>"); highlightBuilder.postTags("</b>"); highlightBuilder.requireFieldMatch(false);//搜索字段和高亮字段不进行一致性检查 sourceBuilder.highlighter(highlightBuilder);
拼装聚合条件(AggregationBuilders)
// 设置城市聚合条件 TermsAggregationBuilder city = AggregationBuilders.terms("city_name").field("city").size(10); sourceBuilder.aggregation(city); // 设置星级聚合条件 TermsAggregationBuilder starName = AggregationBuilders.terms("star_name").field("starName").size(20); sourceBuilder.aggregation(starName); // 设置品牌聚合条件 TermsAggregationBuilder brand = AggregationBuilders.terms("brand_name").field("brand").size(20); sourceBuilder.aggregation(brand); request.source(sourceBuilder);
执行请求
// 执行搜索请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT);
解析搜索结果
解析总条数
// 获取查询总条数 TotalHits totalHits = hits.getTotalHits(); long total = totalHits.value; System.out.println("总条数:"+total);
解析分页数据
// 获取当前页数据 SearchHit[] list = hits.getHits(); List<HotelDoc> results = new ArrayList<>(); for (SearchHit hit : list) {String doc = hit.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(doc, HotelDoc.class);results.add(hotelDoc); } System.out.println(results.toString());
解析排序数据
// 获取排序结果 Object[] sortValues = hit.getSortValues(); if(sortValues!=null&&sortValues.length>0){doc.setDistance(sortValues[0]); }
解析高亮数据
// 解析高亮结果 Map<String, HighlightField> highlightFields = hit.getHighlightFields(); if(highlightFields!=null) {HighlightField highlightField = highlightFields.get("name");if(highlightField!=null) {Text[] fragments = highlightField.fragments();Text fragment = fragments[0];String temp = fragment.string();hotelDoc.setName(temp);} }
解析聚合数据
Terms terms = (Terms) aggregationMap.get(name); List<? extends Terms.Bucket> buckets = terms.getBuckets(); List<String> list = new ArrayList<>(); for (Terms.Bucket bucket : buckets) {String key = bucket.getKeyAsString();list.add(key); }
Elasticsearch常见搜索方法的实现相关推荐
- 基于Elasticsearch实现搜索推荐
在基于Elasticsearch实现搜索建议一文中我们曾经介绍过如何基于Elasticsearch来实现搜索建议,而本文是在此基于上进一步优化搜索体验,在当搜索无结果或结果过少时提供推荐搜索词给用户. ...
- ElasticSearch学习29_基于Elasticsearch实现搜索推荐
2019独角兽企业重金招聘Python工程师标准>>> 在基于Elasticsearch实现搜索建议一文中我们曾经介绍过如何基于Elasticsearch来实现搜索建议,而本文是在此 ...
- 基于Java、Kafka、ElasticSearch的搜索框架的设计与实现
Jkes是一个基于Java.Kafka.ElasticSearch的搜索框架.Jkes提供了注解驱动的JPA风格的对象/文档映射,使用rest api用于文档搜索. 项目主页:https://gith ...
- 一文介绍备机重建各种方法的实现机制
摘要:本文将介绍备机重建各种方法的实现机制,并结合应用场景分析,以及对新增参数的使用建议,以期获得最佳应用效果. 本文分享自华为云社区<先码再看,一文介绍备机重建各种方法的实现机制>,原文 ...
- ElasticSearch(七) 搜索
title: ElasticSearch(七) 搜索 tags: ElasticSearch author: Clown95 搜索 在前面,已经介绍了在ElasticSearch索引中处理数据的基础知 ...
- elasticsearch分布式搜索配置文件详解
2019独角兽企业重金招聘Python工程师标准>>> Elasticsearch是一个开源的分布式实时搜索与分析引擎,支持云服务.它是基于Apache Lucene搜索引擎的类库创 ...
- DataList中的按钮触发事件的方法的实现
DataList中的按钮触发事件的方法的实现 1.要在CommandName中设定名字如: <asp:Button id="Button1" runat=&quo ...
- python运行mcmc为何老出错_python中mcmc方法的实现
MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...
- Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)
**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...
最新文章
- java override overwrite,重写(overwrite)、重载(overload)和覆盖(override)
- 日志 log4j.xml配置详解
- SHE PWM的simulink仿真谐波分析
- linux根文件系统创建过程
- python创建float型的列表_如何在Python中进行列表的创建?
- 数组之间的计算matlab,matlab中的矩阵运算和数组运算方法
- VS2010 MFC多文档中的工具栏CMFCToolBar停靠的问题
- [Java2入门经典]第9章 访问文件和目录
- 红米note3支持html,红米note3如何检测硬件信息?指令代码说明
- JSPs only permit GET POST or HEAD的解决方案(REST风格)
- JavaScript实现秒杀倒计时效果(附源码)
- 2022-2028全球与中国卫星地面网络科技市场现状及未来发展趋势
- SEO主要是做什么的?零基础能学习吗?
- 功能齐全的 ESP32 智能手表,具有多个表盘、心率传感器硬件设计
- 使用python-docx将爬取结果保存到word
- IC在測試生產過程的靜電放電(ESD)擊傷及電性過壓(EOS)現象
- 亲身体验 北京-环球嘉年华!
- 腾讯嵌入式系统tos移植到正点原子阿波罗F429
- selenium模拟浏览器解决反监测,获取cookies解决登录问题
- runas自动输入密码普通用户以管理员权限自动安装软件
热门文章
- JavaScript奇淫技巧:隐写术
- 深入理解计算机系统 2.1 节信息存储,深入理解计算机系统(原书第3版)- 第2章 信息的表示和处理 笔记...
- MEM/MBA 写作-论说文(03)立意 答案解析
- Excel 中连续生成开始日期和结束日期之间的日期
- emu8086不支持的x86语法
- 固态硬盘数据恢复商家梳理
- 别只关注chatGPT能不能写论文了,它还支持49中场景,代码都给你写好了,速领
- 知识融合中几种计算文本相似度的方法(代码)
- Anaconda 虚拟环境:pyuic之找不到模块之最后的希望(最新)
- KNN(k-nearest neighbor的缩写)最近邻算法原理详解