package com.gxy.ESChap01;

 import java.net.InetAddress;

 import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class ESQuery {
private static String host="192.168.56.3"; // 服务器地址
private static int port=9300; // 端口 public static final String CLUSTER_NAME = "my-application"; //集群名称 private TransportClient client=null; private static Settings settings= Settings.builder()
.put("cluster.name",CLUSTER_NAME)
.put("client.transport.sniff", true)
.build(); //获取客户端
@SuppressWarnings({ "resource", "unchecked" })
@Before
public void getClient() throws Exception {
try {
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host),port));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //关闭客户端
@After
public void close() {
if(client!=null) {
client.close();
}
} /**
* 查询所有
*/
@Test
public void searchAll() {
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();//查询所有
SearchHits hits=sr.getHits();
for(SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
}
}
/**
* 分页查询
*/
@Test
public void searchPaging() {
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery()).setFrom(0).setSize(2).execute().actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
/**
* 排序查询
*/
@Test
public void searchOrderBy() {
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery())
.addSort("publishDate",SortOrder.DESC).execute().actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
/**
* 数据列过滤查询
*/
@Test
public void searchInclude() {
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery())
.setFetchSource(new String[] {"title","price"},null)
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
/***
* 简单条件查询
*/
@Test
public void searchByCondition() {
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
SearchResponse sr=srb.setQuery(QueryBuilders.matchQuery("title","铁"))
.setFetchSource(new String[] {"title","price"},null)
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
/**
* 条件查询高亮实现
*/
@Test
public void searchHighlight() {
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
HighlightBuilder highlightBuilder=new HighlightBuilder();
highlightBuilder.preTags("<h2>");
highlightBuilder.postTags("</h2>");
highlightBuilder.field("title");
SearchResponse sr=srb.setQuery(QueryBuilders.matchQuery("title","战"))
.highlighter(highlightBuilder)
.setFetchSource(new String[] {"title","price"},null)
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
System.out.println(hit.getHighlightFields());
}
}
/**
* 多条件查询 must
*/
@Test
public void searchMutil() {
SearchRequestBuilder srb =client.prepareSearch("film").setTypes("dongzuo");
QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");
QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "星球");
SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()
.must(queryBuilder)
.must(queryBuilder2))
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
} /**
* 多条件查询 mustNot
*/
@Test
public void searchMutil2() {
SearchRequestBuilder srb =client.prepareSearch("film").setTypes("dongzuo");
QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");
QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "武士");
SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()
.must(queryBuilder)
.mustNot(queryBuilder2))
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
} /**
* 多条件查询 should提高得分
* @throws Exception
*/
@Test
public void searchMutil3()throws Exception{
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");
QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "星球");
QueryBuilder queryBuilder3=QueryBuilders.rangeQuery("publishDate").gt("2018-01-01");
SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()
.must(queryBuilder)
.should(queryBuilder2)
.should(queryBuilder3))
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getScore()+":"+hit.getSourceAsString());
}
}
/***
* 多条件查询 range限制范围
*/
@Test
public void searchMutil4() {
SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");
QueryBuilder queryBuilder2=QueryBuilders.rangeQuery("price").lte(40);
SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()
.must(queryBuilder)
.filter(queryBuilder2))
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
}

ElasticSearch(五):Java操作ElasticSearch执行查询的更多相关文章

  1. java操作elasticsearch实现组合桶聚合

    1.terms分组查询 //分组聚合 @Test public void test40() throws UnknownHostException{ //1.指定es集群 cluster.name 是 ...

  2. java操作elasticsearch实现query String

    1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...

  3. java操作elasticsearch实现聚合查询

    1.max 最大值 //max 求最大值 @Test public void test30() throws UnknownHostException{ //1.指定es集群 cluster.name ...

  4. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

    1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...

  5. java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)

    1.条件match query查询 //条件查询match query @Test public void test10() throws UnknownHostException { //1.指定e ...

  6. java操作elasticsearch实现查询删除和查询所有

    后期博客本人都只给出代码,具体的说明在代码中也有注释. 1.查询删除 //查询删除:将查询到的数据进行删除 @Test public void test8() throws UnknownHostEx ...

  7. java操作elasticsearch实现批量添加数据(bulk)

    java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...

  8. java操作elasticsearch实现基本的增删改查操作

    一.在进行java操作elasticsearch之前,请确认好集群的名称及对应的ES节点ip和端口 1.查看ES的集群名称 #进入elasticsearch.yml配置文件/opt/elasticse ...

  9. Java操作ElasticSearch之创建客户端连接

    Java操作ElasticSearch之创建客户端连接 3 发布时间:『 2017-09-11 17:02』  博客类别:elasticsearch  阅读(3157) Java操作ElasticSe ...

  10. 使用Java操作Elasticsearch(Elasticsearch的java api使用)

    1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...

随机推荐

  1. ES5、ES2015、ECMAScript6(转载)

    阮一峰博客系列: http://es6.ruanyifeng.com/#README

  2. Spring Boot 2.0 升级指南

    Spring Boot 2.0 升级指南 前言 Spring Boot已经发布2.0有5个月多,多了很多新特性,一些坑也慢慢被填上,最近有空,就把项目中Spring Boot 版本做了升级,顺便整理下 ...

  3. Dom对象的研究

    1.逻辑运算  ||  &&  ! 1||2   5&&4     !0 || 遇到第一个为true 的数字就终止并返回 && 遇到第一个为false ...

  4. Android Navigation使用

    简介 Navigation导航编辑器旨在简化Android开发中导航的实现,可以帮助我们很好的处理Activity和fragment之间通过FragmentTransaction交互的复杂性,也可以很 ...

  5. undefined 与 xx is not defined 的区别

    undefined 与 xx is not defined 的区别 1. undefined 表示是javascript中的一种数据类型,当被定义的变量没有被赋值或者某个被调用的函数没有定义返回值时候 ...

  6. 使用eclipse初步学习vue.js的基本操作 ①

    一.vue.js的初步认识 <a href="https://unpkg.com/vue ">vue.js下载</a> 1.抛开手动操作DOM的思维,Vue ...

  7. express入门

    (1)express的安装 $ npm install express 或者 $ npm install -g express 或者 $ npm install express -gd 备注: -g ...

  8. 【代码笔记】Web-JavaScript-JavaScript错误

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. yarn安装ant-报错

    异常现象: 使用react引用antd的库时报错 yarn add antd Trace: Error: connect ETIMEDOUT 114.55.80.225:80 at Object._e ...

  10. Android为TV端助力 转载弩的博客

    Android.mk简介:Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解析 ...