ElasticSearch1.7 java api
package cn.xdf.wlyy.solr.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.concurrent.ExecutionException;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
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.highlight.HighlightField;
import com.alibaba.fastjson.JSONObject;
import cn.xdf.wlyy.bbyh.vo.SearchParVo;
import cn.xdf.wlyy.utils.PagedResult;
/**
* Title. <br>
* ElasticSearch工具类.
* <p>
* Copyright: Copyright (c) 2017年7月7日 下午1:09:36
* <p>
* <p>
* Author: jinxudong@xdf.cn
* <p>
* Version: 1.0
* <p>
*/
/**
* Title. <br>
* ElasticSearch 工具类.
* <p>
* Copyright: Copyright (c) 2017年7月10日 上午9:05:30
* <p>
* 2016-3-21 Company: 北京新东方学校
* <p>
* Author: jinxudong@xdf.cn
* <p>
* Version: 1.0
* <p>
*/
public class EsUtil {
/** 启用日志 */
private static Logger logger = Logger.getLogger(EsUtil.class);
private static TransportClient client;
private static ResourceBundle resource = ResourceBundle.getBundle("es");
/** 索引库名称 */
private static String index = resource.getString("es.db");
/** 索引表名称 */
private static String type = resource.getString("es.table");
/** 集群分片数 */
private static String shards_str = resource.getString("es.shards");
private static Integer shards = Integer.parseInt(shards_str);
private static SearchRequestBuilder searchRequestBuilder;
// 获取集群名称
private static String clustername = resource.getString("es.cluster.name");
// 获取集群ip/域名
private static String hostname = resource.getString("es.hostname");
// 获取第一个节点端口号
private static String port1 = resource.getString("es.port.one");
// 获取第一个节点端口号
private static String port2 = resource.getString("es.port.two");
private static Settings settings;
//es加载一次 避免多次链接造成内存溢出 或者使用单例模式
static {
settings = ImmutableSettings.settingsBuilder()
// client.transport.sniff=true
// 客户端嗅探整个集群的状态,把集群中其它机器的ip地址自动添加到客户端中,并且自动发现新加入集群的机器
.put("client.transport.sniff", true).put("client", true)// 仅作为客户端连接
.put("data", false).put("cluster.name", clustername)// 集群名称
.build();
client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(hostname, Integer.parseInt(port1)))// TCP
// 连接地址
.addTransportAddress(new InetSocketTransportAddress(hostname, Integer.parseInt(port2)));
}
/**
* 创建索引 写入elasticsearch
*
* @param jsonlist
* 要创建索引的jsonlist数据
*/
public static void createIndex(List<JSONObject> jsonlist) {
try {
// 创建索引
for (int i = 0; i < jsonlist.size(); i++) {
IndexResponse indexResponse = client.prepareIndex(index, type, jsonlist.get(i).getString("id")).setSource(jsonlist.get(i).toString())
.execute().actionGet();
if (indexResponse.isCreated()) {
logger.info("写入索引库成功...");
} else {
logger.info("写入索引库失败...");
}
}
}
catch (Exception e) {
logger.error(e);
}
}
/**
* 根据索引id删除
*
* @param uids
* 索引id
*/
public static void deleteIndex(List<String> uids) {
for (int i = 0; i < uids.size(); i++) {
DeleteResponse dResponse = client.prepareDelete(index, type, uids.get(i)).execute().actionGet();
if (dResponse.isContextEmpty()) {
logger.info(uids.get(i) + "删除成功...");
} else {
logger.info(uids.get(i) + "删除失败...");
}
}
}
/**
* 根据索引名称删除
*
* @param indexName
* 索引库名称
*/
public static void deleteIndexLib(String indexName) {
DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(indexName).execute().actionGet();
if (dResponse.isContextEmpty()) {
logger.info(indexName + "删除成功。");
} else {
logger.info(indexName + "删除失败");
}
}
/**
* @param uid
* 要更新的索引id
* @param json
* 要更新的json数据
*/
public static void updateIndex(String uid, JSONObject json) {
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index(index);
updateRequest.type(type);
updateRequest.id(uid);
updateRequest.doc(json);
try {
UpdateResponse updateResponse = client.update(updateRequest).get();
if (!updateResponse.isCreated()) {
logger.info(uid + "更新成功");
} else {
logger.info(uid + "更新失败");
}
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
logger.error(e);
}
catch (ExecutionException e) {
// TODO Auto-generated catch block
logger.error(e);
}
}
/**
* 多字段查询
*
* @param pageSize
* 页面大小
* @param keyword
* 查询关键字
* @param columns
* 不确定多个索引字段
* @return map集合 map.put("dispage", disPage); map.put("jsonlist",
* resultlist);
*/
public static Map<String, Object> query(Integer pageSize, Integer currentNo, SearchParVo vo, String... columns) {
searchRequestBuilder = client.prepareSearch(index);
HashMap<String, Object> map = new HashMap<String, Object>();
// 搜索结果集
List<JSONObject> resultlist = new ArrayList<JSONObject>();
QueryBuilder qb = null;
QueryBuilder qb_state = null;
QueryBuilder qb_dept = null;
QueryBuilder qb_item = null;
QueryBuilder qb_subject = null;
QueryBuilder qb_regtype = null;
QueryBuilder qb_disway = null;
BoolQueryBuilder querybuilder = QueryBuilders.boolQuery();
if (StringUtils.isNotBlank(vo.getTitle())) {
qb = QueryBuilders.multiMatchQuery(vo.getTitle(), columns);
querybuilder.must(qb);
// 必要条件 查询需要显示的内容
qb_state = QueryBuilders.matchPhraseQuery("state", "1");
querybuilder.must(qb_state);
if (StringUtils.isNotBlank(vo.getDid())) {
qb_dept = QueryBuilders.matchPhraseQuery("d_id", vo.getDid());
querybuilder.must(qb_dept);
}
if (StringUtils.isNotBlank(vo.getIid())) {
qb_item = QueryBuilders.matchPhraseQuery("i_id", vo.getIid());
querybuilder.must(qb_item);
}
if (StringUtils.isNotBlank(vo.getSid())) {
qb_subject = QueryBuilders.matchPhraseQuery("s_id", vo.getSid());
querybuilder.must(qb_subject);
}
if (StringUtils.isNotBlank(vo.getRegtype())) {
qb_regtype = QueryBuilders.matchPhraseQuery("registration_type", vo.getRegtype());
querybuilder.must(qb_regtype);
}
if (StringUtils.isNotBlank(vo.getDisway())) {
qb_disway = QueryBuilders.matchPhraseQuery("discount_way", vo.getDisway());
querybuilder.must(qb_disway);
}
} else {
qb = QueryBuilders.matchAllQuery();
querybuilder.must(qb);
}
searchRequestBuilder.setQuery(querybuilder);
SearchResponse response = searchRequestBuilder.execute().actionGet();
SearchHits hits = response.getHits();
// 记录总数
long total = hits.totalHits();
// 计算总页数
int totalPages = totalPage(1, pageSize, (int) total);
// 每次开始的位置
int start = (currentNo - 1) * pageSize;
// 添加高亮字段
searchRequestBuilder.addHighlightedField("title");
searchRequestBuilder.setHighlighterPreTags("<span style=\"color:red\">");
searchRequestBuilder.setHighlighterPostTags("</span>");
response = searchRequestBuilder.setFrom(start).setSize(pageSize).execute().actionGet();
SearchHit[] searchHits = response.getHits().hits();
// 封装分页对象信息
PagedResult disPage = new PagedResult();
disPage.setTotal(total);
disPage.setPages(totalPages);
disPage.setPageNo(currentNo);
disPage.setPageSize(pageSize);
for (SearchHit searchHit : searchHits) {
Map<String, Object> dd = searchHit.getSource();
JSONObject json = (JSONObject) JSONObject.toJSON(dd);
// 从设定的高亮域中取得指定域
Map<String, HighlightField> result = searchHit.highlightFields();
HighlightField titleField = result.get("title");
if (titleField != null) {
// 取得定义的高亮标签
Text[] titleTexts = titleField.fragments();
// 为title串值增加自定义的高亮标签
String title = "";
for (Text text : titleTexts) {
title += text;
}
json.put("title", title);
}
resultlist.add(json);
}
map.put("dispage", disPage);
map.put("jsonlist", resultlist);
return map;
}
/**
* @param currentNo
* 当前页
* @param pageSize
* 一页显示多少条记录
* @param totalNum
* 总记录
* @return
*/
public static int totalPage(Integer currentNo, Integer pageSize, int totalNum) {
int totalPages = 0;
if (totalNum % pageSize == 0) {
totalPages = totalNum / pageSize;
} else {
totalPages = totalNum / pageSize + 1;
}
return totalPages;
}
}
ElasticSearch1.7 java api的更多相关文章
- Elasticsearch Java API 配置测试
Elasticsearch1.X,2.X,5.X随着版本的迭代,除了系统升级,Java API也做了相对较大的调整,也就是说,1.X的API在2.X以及5.X乃至未来6.X版本都不是通用的. 本例子使 ...
- Elasticsearch Java API深入详解
0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...
- Atitit 图像处理 调用opencv 通过java api attilax总结
Atitit 图像处理 调用opencv 通过java api attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...
- 【分布式】Zookeeper使用--Java API
一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...
- Elasticsearch的CRUD:REST与Java API
CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...
- [转]HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
- HDFS中JAVA API的使用
HDFS中JAVA API的使用 HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...
- java安全沙箱(四)之安全管理器及Java API
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- Java api 入门教程 之 JAVA的Random类
在实际的项目开发过程中,经常需要产生一些随机数值,例如网站登录中的校验数字等,或者需要以一定的几率实现某种效果,例如游戏程序中的物品掉落等. 在Java API中,在java.util包中专门提供了一 ...
随机推荐
- swift中为什么要创造出可选型?
(1)因为nil这个东西,swift中没有就是没有. Int? 叫 整型可选型,如果不提前声明,直接赋值变量 nil会报错 . 可以将Int赋值给Int? ,但是不能将Int?赋值给Int . ...
- CF613D Kingdom and its Cities 虚树 + 树形DP
Code: #include<bits/stdc++.h> #define ll long long #define maxn 300003 #define RG register usi ...
- 如何利用阿里视频云开源组件,快速自定义你的H5播放器?
摘要: Aliplayer希望提供一种方便.简单.灵活的机制,让客户能够扩展播放器的功能,并且Aliplayer提供一些组件的基本实现,用户可以基于这些开源的组件实现个性化功能,比如自定义UI和自己A ...
- Vue子组件传递数据给父组件
子组件通过this.$emit(event,data)传递数据到父组件 以下是例子: father.vue 父组件 <template> <div> <child @ne ...
- 解决IDEA输入法输入中文候选框不显示问题
本机环境为: 系统: win7 jdk版本:jdk1.8.0_65 idea版本:2017.2.3 解决方法:关掉idea,进入idea的安装目录找到jre64文件夹重命名为j ...
- CDN:目录
ylbtech-CDN:目录 1. 前端开源项目返回顶部 1. http://www.bootcdn.cn/ 2. https://www.npmjs.com/ 3. 2.返回顶部 3.返回顶部 ...
- JSONP的产生,和ajax的异同!
先说说JSONP是怎么产生的: 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,着用自己的方式来阐释一下这个问题,看看是否有帮助. 1.一个众所 ...
- c#继承与构造函数的调用
1.实例化父类时,可以通过new子类来实例化父类,执行构造函数的顺序为:先执行父类的构造函数,再执行子类的构造函数. 2.实例化子类时,只可以new子类,执行顺序同上. 3.父类实例化后,只能执行父类 ...
- 【题解】4879. 【NOIP2016提高A组集训第11场11.9】少女觉
Description 在幽暗的地灵殿中,居住着一位少女,名为古明地觉.据说,从来没有人敢踏入过那座地灵殿,因为人们恐惧于觉一族拥有的能力——读心.掌控人心者,可控天下. 咳咳.人的记忆可以被描述为一 ...
- hdu1257最少拦截系统 动态规划(最长递增子序列(LIS))
Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高 ...