文章目录

  • 1 准备
  • 2 编码

1 准备

  1. 之前的索引
PUT books
{"settings": {"number_of_shards": 3, "number_of_replicas": 1}, "mappings": {"properties": {"id":{"type": "long"},"title":{"type": "text","analyzer": "ik_max_word"},"language":{"type": "keyword"},"author":{"type": "keyword"},"price":{"type": "double"},"publish_time":{"type": "date","format": "yyyy-MM-dd"},"description":{"type": "text","analyzer": "ik_max_word"}}}}
  1. 数据如下

  2. 构造这么一个查询,这里就不关心结果了,主要是如何使用java API构造这个一个请求

GET books/_search
{"query": {"bool": {"filter": [{"term": {"author": "张若愚"}}],"must": [{"fuzzy": {"title": "python"}}],"must_not": [{"prefix": {"language": {"value": "j"}}}], "should": [{"range": {"price": {"gte": 0,"lte": 100}}}]}},"highlight": {"fields": {"title": {}}},"_source": {"excludes": ["id","publish_time"]},"suggest": {"my_suggest": {"text": "python","term": {"field": "description"}}},"sort": [{"price": {"order": "desc"}}]
}
  1. 上面请求的结果
{"took" : 5,"timed_out" : false,"_shards" : {"total" : 3,"successful" : 3,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : null,"hits" : [{"_index" : "books","_type" : "_doc","_id" : "3","_score" : null,"_source" : {"author" : "张若愚","price" : 81.4,"description" : "零基础学python,光盘中作者独家整合开发winPython运行环境,涵盖了Python各个扩展库","language" : "python","title" : "Python科学计算"},"highlight" : {"title" : ["<em>Python</em>科学计算"]},"sort" : [81.4]}]},"suggest" : {"my_suggest" : [{"text" : "python","offset" : 0,"length" : 6,"options" : [ ]}]}
}

2 编码

package study.wyy.esclient.high;import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;/*** @author wyaoyao* @description* @date 2021/1/8 15:30*/
public abstract class BaseTest {public static RestHighLevelClient client;public static ObjectMapper objectMapper;static {client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));objectMapper = new ObjectMapper();}
}
package study.wyy.esclient.high.search;import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.search.suggest.SuggestBuilder;
import org.elasticsearch.search.suggest.SuggestBuilders;
import org.elasticsearch.search.suggest.term.TermSuggestionBuilder;
import org.junit.Test;
import study.wyy.esclient.high.BaseTest;import java.io.IOException;/*** @author wyaoyao* @description* @date 2021/1/13 14:17*/
@Slf4j
public class SearchTest extends BaseTest {@Testpublic void test() throws IOException {// 1 构建SearchRequestSearchRequest request = buildSearchRequest();// 2 执行请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);log.info(new ObjectMapper().writer().writeValueAsString(response));}private SearchRequest buildSearchRequest() {SearchRequest request = new SearchRequest();// 设置要搜索的索引request.indices("books");// 添加搜索条件,大多数搜索参数都是通过SearchSourceBuilder构建// 构建SearchSourceBuilderSearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 设置一些基本参数,超时时间,分页信息(from size)等searchSourceBuilder.timeout(TimeValue.timeValueSeconds(10));searchSourceBuilder.from(0);searchSourceBuilder.size(10);// 构建查询参数QueryBuilder queryBuilder = buildQueryParam();searchSourceBuilder.query(queryBuilder);// 设置高亮HighlightBuilder highlightBuilder = new HighlightBuilder();// title字段高亮HighlightBuilder.Field title = new HighlightBuilder.Field("title");highlightBuilder.field(title);searchSourceBuilder.highlighter(highlightBuilder);// 设置SuggestSuggestBuilder suggestBuilder = new SuggestBuilder();TermSuggestionBuilder text = SuggestBuilders.termSuggestion("description").text("python");suggestBuilder.addSuggestion("my_suggest",text);searchSourceBuilder.suggest(suggestBuilder);// source过滤String[] excludes = {"id","publish_time"};searchSourceBuilder.fetchSource(null,excludes);// 排序FieldSortBuilder sortBuilder = new FieldSortBuilder("price").order(SortOrder.DESC);searchSourceBuilder.sort(sortBuilder);// 最后不要忘记将searchSourceBuilder添加到SearchRequestrequest.source(searchSourceBuilder);return request;}private QueryBuilder buildQueryParam() {QueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()// 过滤.filter(QueryBuilders.termQuery("author", "张若愚"))// 模糊查询.must(QueryBuilders.fuzzyQuery("title", "python"))// 前缀查询.mustNot(QueryBuilders.prefixQuery("language", "j"))// 范围查询.should(QueryBuilders.rangeQuery("price").gte(0).lte(100));return boolQueryBuilder;}
}

最后的输出

{"internalResponse":{"numReducePhases":1,"fragment":true},"scrollId":null,"totalShards":3,"successfulShards":3,"skippedShards":0,"shardFailures":[],"clusters":{"total":0,"successful":0,"skipped":0,"fragment":true},"profileResults":{},"numReducePhases":1,"terminatedEarly":null,"aggregations":null,"timedOut":false,"took":{"hours":0,"minutes":0,"seconds":0,"nanos":12000000,"millis":12,"stringRep":"12ms","micros":12000,"minutesFrac":0.0002,"hoursFrac":0.0000033333333333333333,"days":0,"microsFrac":12000,"daysFrac":0.00000013888888888888888,"millisFrac":12,"secondsFrac":0.012},"suggest":{"fragment":true},"failedShards":0,"hits":{"hits":[{"score":"NaN","id":"3","type":"_doc","nestedIdentity":null,"version":-1,"seqNo":-2,"primaryTerm":0,"highlightFields":{"title":{"name":"title","fragments":[{"fragment":true}],"fragment":true}},"sortValues":[81.4],"matchedQueries":[],"explanation":null,"shard":null,"index":"books","clusterAlias":null,"sourceAsMap":{"author":"张若愚","price":81.4,"description":"零基础学python,光盘中作者独家整合开发winPython运行环境,涵盖了Python各个扩展库","language":"python","title":"Python科学计算"},"innerHits":null,"fields":{},"sourceRef":{"fragment":true},"rawSortValues":[],"sourceAsString":"{"author":"张若愚","price":81.4,"description":"零基础学python,光盘中作者独家整合开发winPython运行环境,涵盖了Python各个扩展库","language":"python","title":"Python科学计算"}","fragment":false}],"totalHits":{"value":1,"relation":"EQUAL_TO"},"maxScore":"NaN","sortFields":null,"collapseField":null,"collapseValues":null,"fragment":true},"fragment":false
}

21 Rest高级客户端实践(七):一个小案例相关推荐

  1. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import timestart = time.time()u ...

  2. 一个小案例理解case穿透、switch语句

    一.用case穿透简化代码以一个小案例为例:键盘录入星期数,输出工作日.休息日(1-5)工作日,(6-7)休息日 package test;import java.util.Scanner;publi ...

  3. 用一个小案例来解释linux中文件或目录的权限

    Linux中文档和目录的权限 众所周知 , Linux中文档的权限包括所有者权限(User).同组权限(Group)和其他权限(Other).使用rwx来作为表示,分别为read.write和exec ...

  4. 爬虫的一个小案例:python实现英汉互译

    什么是网络爬虫? 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序.众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容. 一个小案例:py ...

  5. 15 Rest高级客户端实践(一):文档索引

    文章目录 1 准备工作 2 前置API介绍 2.1 如何构建高级客户端 2.2 如何构建json文档(数据) 3 索引文档 3.1 如何构建IndexRequest 3.2 执行请求 3.2.1 同步 ...

  6. 微信有电脑客户端吗_一个小程序,就能让你用手机控制电脑~

    Hello大家好,这里是TopOne软件管家! 现在基本每人必备一个手机和一台电脑,电脑是我们办公所需,但有时候经电脑处理的文件总是忘了转移到U盘或网盘中,人在外想想就难受,那有什么软件可以实现手机控 ...

  7. 20 Rest高级客户端实践(六):搜索入门和基本API介绍

    文章目录 1 入门程序 2 API基本介绍 2.1 SearchRequest 2.2 SearchSourceBuilder 基础设置项 设置查询条件 设置排序策略 source filter 高亮 ...

  8. 22 Rest高级客户端实践(八):滚动搜索

    文章目录 1 同步执行 Search Scroll API :可以获取大量的搜索结果,有点类似于MySQL的分页查询 1 同步执行 package study.wyy.esclient.high.se ...

  9. 一个小案例精通lamda表达式与函数式接口

    前言:只有基础(多态.匿名接口实现类)足够扎实才能更好的学习花拳绣腿(lamda表达式),Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...

最新文章

  1. 2019年最新十篇「深度学习领域综述」论文
  2. java string 内存写了_Java String的内存机制
  3. 一个完整的嵌入式程序_嵌入式入门-从STM32CudeMX、FreeRtos、Proteu仿真开始
  4. nlp基础—4.搜索引擎中关键技术讲解
  5. Axure原型模板CRM客户关系管理系统高保真原型设计
  6. ubuntu 扫描局域网ip
  7. 数字化转型投入大、效果差,永洪BI如何帮助企业迈出数据应用第一步
  8. 学习方法推荐——番茄工作法
  9. 卡耐基梅隆大学计算机金融专业,卡内基梅隆大学硕士费用 - 卡耐基梅隆大学计算机金融MS研究生接不接受gre成绩?不?...
  10. 打印时去除页眉和页脚
  11. 自制卡牌游戏Python
  12. 幼麟棋牌登录流程分析
  13. [扫盲教程]——Mac 新手最容易犯的几项错误
  14. Oracle X$BH
  15. 计算机瑞士留学经验,瑞士留学你可能会遇到的问题详解
  16. 格式工厂压缩视频方法分享
  17. 世卫批准强生新冠疫苗紧急使用权;美洲邮轮业停摆一年后将复航;IMAX将入驻上海多个商业地标 | 美通企业周刊...
  18. 压缩解压工具gzip、pigz、gtz大比较
  19. 正向、逆向工程在UML图中的应用
  20. 第十三届 ACM/CCPC 吉林省赛 J. Send Scores Problem

热门文章

  1. 2012r2ad虚拟服务器升级2016,Windows Server 2016 Hyper-V之滚动式升级Hyper-V2012R2群集到2016 | 365vCloud的云计算之旅...
  2. 编译原理:高级程序设计语言的语法描述
  3. php配置本地一个新的虚拟主机
  4. 平板:运行Windows 8 So easy!
  5. Windows 7 优化(收集整理)
  6. 网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法
  7. 桶排序+睡眠排序python
  8. 自己动手打造PE系统
  9. 点击弹出窗口,在窗口中播放视频文…
  10. 实时公交查询到站播报流量主小程序开发