package com.hope.es;

import org.elasticsearch.action.search.SearchResponse;
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.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;

/**
* @author newcityman
* @date 2020/1/16 - 23:56
*/
public class SearchIndex {
private TransportClient client;

@Before
public void init() throws Exception {
//1、创建一个setting对象
Settings settings = Settings.builder().
put("cluster.name", "my‐elasticsearch").build();
//2、创建一个TransportClient对象,
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
}

public void search(QueryBuilder queryBuilder) throws Exception {
//3、执行查询结果
SearchResponse searchResponse = client.prepareSearch("index_hello")
.setTypes("article")
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
//每页显示的页数
.setSize(5)
.get();
//4、取查询结果
SearchHits searchHits = searchResponse.getHits();
//5、取查询结果的总记录数
System.out.println("总记录数:" + searchHits.getTotalHits());
//6、查询结果列表
Iterator<SearchHit> iterator = searchHits.iterator();
while (iterator.hasNext()) {
SearchHit searchHit = iterator.next();
//打印文档对象,以json格式输出
System.out.println(searchHit.getSourceAsString());
//取文档的属性
System.out.println("+++++++++++++++++++文档的属性");
Map<String, Object> document = searchHit.getSource();
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("content"));
}
//7、关闭client
client.close();
}

/**
* 根据id查询
*/

@Test
public void testSearchById() throws Exception {
//1、创建一个client对象
//2、创建一个查询对象
QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("4", "5", "6");
//执行查询
search(queryBuilder);
}

/**
* 根据关键词查询
* @throws Exception
*/
@Test
public void testSearchByTerm() throws Exception{
//创建client对象
//创建查询对象
//参数一:要搜索的字段
//参数二:要搜索的关键词
QueryBuilder queryBuilder = QueryBuilders.termQuery("content", "政府");
search(queryBuilder);
}

@Test
public void testQueryStringQuery() throws Exception{
//创建一个QueryBuilder对象
QueryStringQueryBuilder query = QueryBuilders.queryStringQuery("澳洲火气大")
.defaultField("title");
//执行查询
search(query,"title");
}

public void search(QueryBuilder queryBuilder,String highlightField) throws Exception {
HighlightBuilder highlightBuilder = new HighlightBuilder();
//高亮显示的字段
highlightBuilder.field(highlightField);
//高亮显示的字段前缀
highlightBuilder.preTags("<em>");
highlightBuilder.postTags("</em>");
//3、执行查询结果
SearchResponse searchResponse = client.prepareSearch("index_hello")
.setTypes("article")
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
//每页显示的页数
.setSize(5)
.highlighter(highlightBuilder)
.get();
//4、取查询结果
SearchHits searchHits = searchResponse.getHits();
//5、取查询结果的总记录数
System.out.println("总记录数:" + searchHits.getTotalHits());
//6、查询结果列表
Iterator<SearchHit> iterator = searchHits.iterator();
while (iterator.hasNext()) {
SearchHit searchHit = iterator.next();
//打印文档对象,以json格式输出
System.out.println(searchHit.getSourceAsString());
//取文档的属性
System.out.println("==================文档的属性");
Map<String, Object> document = searchHit.getSource();
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("content"));
System.out.println("*********高亮结果");
Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
System.out.println(highlightFields);
//取title高亮显示的结果
HighlightField field = highlightFields.get(highlightField);
Text[] fragments = field.getFragments();
if(fragments!=null){
String title = fragments[0].toString();
System.out.println("title:="+title);
}
}
//7、关闭client
client.close();
}

}

最新文章

  1. matlab 假设检验
  2. ant的安装及项目的发布
  3. 【javascript杂谈】你所不知道的replace函数
  4. 微信小程序开发:Flex布局
  5. 【C++】C++求vector中的最大最小值
  6. jdbc的通讯录CRUD
  7. 需要熟记的git命令
  8. 7个改变世界的Java项目
  9. 导入外部jar包的方法
  10. Java从服务器上获取时间,动态在jsp页面显示
  11. (3/18)重学Standford_iOS7开发_Objective-C_课程笔记
  12. lucene评分推导公式
  13. Spring in Action --- 使用MockMvc时报异常
  14. Eclipse 的 git 插件操作 &quot;代码提交&quot;以及&quot;代码冲突&quot;
  15. 设计模式的征途—20.备忘录(Memento)模式
  16. Head First设计模式之抽象工厂模式
  17. Python_day_01
  18. 千行代码入门Python
  19. 导入Excel文件
  20. 数据类型-DataFrame

热门文章

  1. buuoj刷题 October
  2. 求求你们了,别再写满屏的 if/ else 了!
  3. 开源一个由.netcore/.net framework4.6开发的saas微商城+独立部署版本微小程序商城
  4. go微服务框架Kratos笔记(七)使用jwt认证中间件
  5. 如何提高C# StringBuilder的性能
  6. [loj2978]杜老师
  7. SpringCloud升级之路2020.0.x版-41. SpringCloudGateway 基本流程讲解(2)
  8. UI自动化测试:App的WebView页面中,当搜索栏无搜索按钮时处理方法
  9. 洛谷 P3781 - [SDOI2017]切树游戏(动态 DP+FWT)
  10. Linux Alpine安装 Nginx