/**

* 系统环境: vm12 下的centos 7.2

* 当前安装版本: elasticsearch-2.4.0.tar.gz

*/

QueryBuilder 是es中提供的一个查询接口, 可以对其进行参数设置来进行查用擦还训

package com.wenbronk.javaes;import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map.Entry;import org.elasticsearch.action.ListenableActionFuture;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.IndicesQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.index.query.SpanFirstQueryBuilder;
import org.elasticsearch.index.query.WildcardQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.junit.Before;
import org.junit.Test;/*** java操作查询api* @author 231**/
public class JavaESQuery {private TransportClient client;@Beforepublic void testBefore() {Settings settings = Settings.settingsBuilder().put("cluster.name", "wenbronk_escluster").build();client = TransportClient.builder().settings(settings).build().addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("192.168.50.37", 9300)));System.out.println("success to connect escluster");}/*** 使用get查询*/@Testpublic void testGet() {GetRequestBuilder requestBuilder = client.prepareGet("twitter", "tweet", "1");GetResponse response = requestBuilder.execute().actionGet();GetResponse getResponse = requestBuilder.get();ListenableActionFuture<GetResponse> execute = requestBuilder.execute();System.out.println(response.getSourceAsString());}/*** 使用QueryBuilder* termQuery("key", obj) 完全匹配* termsQuery("key", obj1, obj2..)   一次匹配多个值* matchQuery("key", Obj) 单个匹配, field不支持通配符, 前缀具高级特性* multiMatchQuery("text", "field1", "field2"..);  匹配多个字段, field有通配符忒行* matchAllQuery();         匹配所有文件*/@Testpublic void testQueryBuilder() {
//        QueryBuilder queryBuilder = QueryBuilders.termQuery("user", "kimchy");QueryBUilder queryBuilder = QueryBuilders.termQuery("user", "kimchy", "wenbronk", "vini");QueryBuilders.termsQuery("user", new ArrayList<String>().add("kimchy"));
//        QueryBuilder queryBuilder = QueryBuilders.matchQuery("user", "kimchy");
//        QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("kimchy", "user", "message", "gender");QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();searchFunction(queryBuilder);}/*** 组合查询* must(QueryBuilders) :   AND* mustNot(QueryBuilders): NOT* should:                  : OR*/@Testpublic void testQueryBuilder2() {QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("user", "kimchy")).mustNot(QueryBuilders.termQuery("message", "nihao")).should(QueryBuilders.termQuery("gender", "male"));searchFunction(queryBuilder);}/*** 只查询一个id的* QueryBuilders.idsQuery(String...type).ids(Collection<String> ids)*/@Testpublic void testIdsQuery() {QueryBuilder queryBuilder = QueryBuilders.idsQuery().ids("1");searchFunction(queryBuilder);}/*** 包裹查询, 高于设定分数, 不计算相关性*/@Testpublic void testConstantScoreQuery() {QueryBuilder queryBuilder = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name", "kimchy")).boost(2.0f);searchFunction(queryBuilder);// 过滤查询
//        QueryBuilders.constantScoreQuery(FilterBuilders.termQuery("name", "kimchy")).boost(2.0f);}/*** disMax查询* 对子查询的结果做union, score沿用子查询score的最大值, * 广泛用于muti-field查询*/@Testpublic void testDisMaxQuery() {QueryBuilder queryBuilder = QueryBuilders.disMaxQuery().add(QueryBuilders.termQuery("user", "kimch"))  // 查询条件.add(QueryBuilders.termQuery("message", "hello")).boost(1.3f).tieBreaker(0.7f);searchFunction(queryBuilder);}/*** 模糊查询* 不能用通配符, 不知道干啥用*/@Testpublic void testFuzzyQuery() {QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery("user", "kimch");searchFunction(queryBuilder);}/*** 父或子的文档查询*/@Testpublic void testChildQuery() {QueryBuilder queryBuilder = QueryBuilders.hasChildQuery("sonDoc", QueryBuilders.termQuery("name", "vini"));searchFunction(queryBuilder);}/*** moreLikeThisQuery: 实现基于内容推荐, 支持实现一句话相似文章查询* {   "more_like_this" : {   "fields" : ["title", "content"],   // 要匹配的字段, 不填默认_all"like_text" : "text like this one",   // 匹配的文本}   }     percent_terms_to_match:匹配项(term)的百分比,默认是0.3min_term_freq:一篇文档中一个词语至少出现次数,小于这个值的词将被忽略,默认是2max_query_terms:一条查询语句中允许最多查询词语的个数,默认是25stop_words:设置停止词,匹配时会忽略停止词min_doc_freq:一个词语最少在多少篇文档中出现,小于这个值的词会将被忽略,默认是无限制max_doc_freq:一个词语最多在多少篇文档中出现,大于这个值的词会将被忽略,默认是无限制min_word_len:最小的词语长度,默认是0max_word_len:最多的词语长度,默认无限制boost_terms:设置词语权重,默认是1boost:设置查询权重,默认是1analyzer:设置使用的分词器,默认是使用该字段指定的分词器*/@Testpublic void testMoreLikeThisQuery() {QueryBuilder queryBuilder = QueryBuilders.moreLikeThisQuery("user").like("kimchy");
//                            .minTermFreq(1)         //最少出现的次数
//                            .maxQueryTerms(12);        // 最多允许查询的词语searchFunction(queryBuilder);}/*** 前缀查询*/@Testpublic void testPrefixQuery() {QueryBuilder queryBuilder = QueryBuilders.matchQuery("user", "kimchy");searchFunction(queryBuilder);}/*** 查询解析查询字符串*/@Testpublic void testQueryString() {QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("+kimchy");searchFunction(queryBuilder);}/*** 范围内查询*/public void testRangeQuery() {QueryBuilder queryBuilder = QueryBuilders.rangeQuery("user").from("kimchy").to("wenbronk").includeLower(true)     // 包含上界.includeUpper(true);      // 包含下届searchFunction(queryBuilder);}/*** 跨度查询*/@Testpublic void testSpanQueries() {QueryBuilder queryBuilder1 = QueryBuilders.spanFirstQuery(QueryBuilders.spanTermQuery("name", "葫芦580娃"), 30000);     // Max查询范围的结束位置  QueryBuilder queryBuilder2 = QueryBuilders.spanNearQuery()  .clause(QueryBuilders.spanTermQuery("name", "葫芦580娃")) // Span Term Queries  .clause(QueryBuilders.spanTermQuery("name", "葫芦3812娃"))  .clause(QueryBuilders.spanTermQuery("name", "葫芦7139娃"))  .slop(30000)                                               // Slop factor  .inOrder(false)  .collectPayloads(false);  // Span NotQueryBuilder queryBuilder3 = QueryBuilders.spanNotQuery()  .include(QueryBuilders.spanTermQuery("name", "葫芦580娃"))  .exclude(QueryBuilders.spanTermQuery("home", "山西省太原市2552街道"));  // Span Or   QueryBuilder queryBuilder4 = QueryBuilders.spanOrQuery()  .clause(QueryBuilders.spanTermQuery("name", "葫芦580娃"))  .clause(QueryBuilders.spanTermQuery("name", "葫芦3812娃"))  .clause(QueryBuilders.spanTermQuery("name", "葫芦7139娃"));  // Span Term  QueryBuilder queryBuilder5 = QueryBuilders.spanTermQuery("name", "葫芦580娃");  }/*** 测试子查询*/@Testpublic void testTopChildrenQuery() {QueryBuilders.hasChildQuery("tweet", QueryBuilders.termQuery("user", "kimchy")).scoreMode("max");}/*** 通配符查询, 支持 * * 匹配任何字符序列, 包括空* 避免* 开始, 会检索大量内容造成效率缓慢*/@Testpublic void testWildCardQuery() {QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("user", "ki*hy");searchFunction(queryBuilder);}/*** 嵌套查询, 内嵌文档查询*/@Testpublic void testNestedQuery() {QueryBuilder queryBuilder = QueryBuilders.nestedQuery("location", QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("location.lat", 0.962590433140581)).must(QueryBuilders.rangeQuery("location.lon").lt(36.0000).gt(0.000))).scoreMode("total");}/*** 测试索引查询*/@Testpublic void testIndicesQueryBuilder () {QueryBuilder queryBuilder = QueryBuilders.indicesQuery(QueryBuilders.termQuery("user", "kimchy"), "index1", "index2").noMatchQuery(QueryBuilders.termQuery("user", "kimchy"));}/*** 查询遍历抽取* @param queryBuilder*/private void searchFunction(QueryBuilder queryBuilder) {SearchResponse response = client.prepareSearch("twitter").setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setScroll(new TimeValue(60000)).setQuery(queryBuilder).setSize(100).execute().actionGet();while(true) {response = client.prepareSearchScroll(response.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();for (SearchHit hit : response.getHits()) {Iterator<Entry<String, Object>> iterator = hit.getSource().entrySet().iterator();while(iterator.hasNext()) {Entry<String, Object> next = iterator.next();System.out.println(next.getKey() + ": " + next.getValue());if(response.getHits().hits().length == 0) {break;}}}break;}
//        testResponse(response);}/*** 对response结果的分析* @param response*/public void testResponse(SearchResponse response) {// 命中的记录数long totalHits = response.getHits().totalHits();for (SearchHit searchHit : response.getHits()) {// 打分float score = searchHit.getScore();// 文章idint id = Integer.parseInt(searchHit.getSource().get("id").toString());// titleString title = searchHit.getSource().get("title").toString();// 内容String content = searchHit.getSource().get("content").toString();// 文章更新时间long updatetime = Long.parseLong(searchHit.getSource().get("updatetime").toString());}}/*** 对结果设置高亮显示*/public void testHighLighted() {/*  5.0 版本后的高亮设置* client.#().#().highlighter(hBuilder).execute().actionGet();HighlightBuilder hBuilder = new HighlightBuilder();hBuilder.preTags("<h2>");hBuilder.postTags("</h2>");hBuilder.field("user");        // 设置高亮显示的字段*/// 加入查询中SearchResponse response = client.prepareSearch("blog").setQuery(QueryBuilders.matchAllQuery()).addHighlightedField("user")        // 添加高亮的字段.setHighlighterPreTags("<h1>").setHighlighterPostTags("</h1>").execute().actionGet();// 遍历结果, 获取高亮片段SearchHits searchHits = response.getHits();for(SearchHit hit:searchHits){System.out.println("String方式打印文档搜索内容:");System.out.println(hit.getSourceAsString());System.out.println("Map方式打印高亮内容");System.out.println(hit.getHighlightFields());System.out.println("遍历高亮集合,打印高亮片段:");Text[] text = hit.getHighlightFields().get("title").getFragments();for (Text str : text) {System.out.println(str.string());}}}
}

转载自https://www.cnblogs.com/wenbronk/p/6432990.html

elasticsearch java api查询相关推荐

  1. Elasticsearch Java API 分组、聚合、嵌套相关查询

    Elasticsearch Java API 分组.聚合.嵌套相关查询 翼支付监控系统正使用es做后端存储,这边我们是将日志计算处理过后的数据通过kafka储存到es.选择用es作为数据储存端是考虑到 ...

  2. ElasticSearch Java Api(四) -删除索引

    删除可以是删除整个索引库,也可以根据文档id删除索引库下的文档,还可以通过query查询条件删除所有符合条件的数据. 一.删除整个索引库 下面的例子会删除indexName索引: DeleteInde ...

  3. Elasticsearch Java API四种实现方式

    0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...

  4. Elasticsearch RestHighLevelClient 已标记为被弃用 它的替代方案 Elasticsearch Java API Client 的基础教程及迁移方案

    在Elasticsearch7.15版本之后,Elasticsearch官方将它的高级客户端RestHighLevelClient标记为弃用状态.同时推出了全新的Java API客户端Elastics ...

  5. SpringBoot整合最新Elasticsearch Java API Client 7.16教程

    文章目录 前言 一.Elasticsearch和Kibana 7.16版本安装 二.pom.xml文件引入依赖 三.代码实例 总结 前言 最新在学习SpringBoot整合es的一些知识,浏览了网上的 ...

  6. Elasticsearch8.0版本中Elasticsearch Java API Client客户端的基本使用方法

    关于Elasticsearch Java API Client客户端如何连接以及如何对索引和文档进行基本的增删改查操作请查看我的上一篇博文:Elasticsearch RestHighLevelCli ...

  7. Elasticsearch Java API 很全的整理以及架构剖析

    Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...

  8. Elasticsearch Java API 6.2(java client)

    前言 本节描述了Elasticsearch提供的Java API,所有的Elasticsearch操作都使用客户端对象执行,所有操作本质上都是完全异步的(要么接收监听器,要么未来返回). 此外,客户端 ...

  9. ElasticSearch Java Api(一) -创建索引

    ElasticSearch Java API官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/jav ...

最新文章

  1. 项目构建之maven篇:2.HelloWorld项目构建过程
  2. 解决weblogic Managed Server启动非常慢的情况
  3. pyspark基础教程
  4. Spring注解开发-Bean注册
  5. A flight (to Boston) to Denver - 基于转移的顺滑技术研究 | 论文访谈间 #22
  6. 使用request简单爬虫
  7. Android插件基础之类加载器学习
  8. 青禾BBS数据库查询语句(动网)
  9. POJ 1422 Air Raid
  10. phpsduty环境下,使用composer安装报错
  11. QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)
  12. Xcode5 使用gitHub上库的SSH地址建立Repository,以及如何通过Xcode把代码传到GitHub
  13. MongoDB 快速入门实战教程最新版
  14. sql server2008如何修改mac地址_QCC304x/QCC514x:修改蓝牙MAC地址及名称
  15. IT加速营-关于java开发,测试及职业规划的公众号
  16. 黑桃符号java怎么打印出来_eclipse强转无法输出ASCII码为3的字符(黑桃)?Intellij IDEA用Swing开发...
  17. SAP的增强(enhancement)
  18. Windows系统下运行hadoop、HBase程序出错Could not locate executablenull\bin\winutils.exe in the Hadoop binaries
  19. 一篇文章教你正确解锁 代理ip 的使用方式,包含两个实战案例
  20. hive 使用beelin连接报错

热门文章

  1. Linux如何安装iperf软件,Linux 下网络性能测试工具 iperf 的安装和使用
  2. 【python】-- Socket接收大数据
  3. java开发C语言编译器
  4. [GCJ] Qualification Round 2017
  5. POJ3728 THE MERCHANT LCA RMQ DP
  6. leetcode @python 120. Triangle
  7. [软件工程学习笔记]个人java小程序---词频统计(二)
  8. 探秘:TriCore处理器中断机制
  9. Linux 文件相关的常用命令
  10. 如何明智的使用计算机,幼儿园如何正确使用计算机