package org.ufo;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
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.transport.InetSocketTransportAddress;
import org.elasticsearch.common.unit.TimeValue;
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.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
public class Es {
// 连接
private static TransportClient client;
// 索引库名称,一般都是一个库,只是里边的type不同,比如user/goods
private static final String index = "testindex";
public Es() {
// 通过 setting对象来指定集群配置信息
Settings settings = Settings.builder()//
.put("client.transport.sniff", true)// 自动嗅探发现集群节点
.put("client.transport.ignore_cluster_name", true)// 忽略集群名称
.put("xpack.security.user", "elastic:changeme")// 安全认证
.build();
client = new PreBuiltXPackTransportClient(settings);
try {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.33.111"), 9300));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.33.112"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
/**
*
* @Description: 关闭连接
* @author kang
* @date 2017年5月11日
*/
public void close() {
client.close();
}
/**
*
* @Description: 验证链接是否正常
* @author kang
* @date 2017年5月11日
*/
public boolean validate() {
return client.connectedNodes().size() == 0 ? false : true;
}
/**
*
* @Description:添加文档
* @author kang
* @date 2017年1月3日
*/
public void addDoc(String type, Object id, Object object) {
client.prepareIndex(index, type, id.toString()).setSource(JSON.toJSONString(object)).get();
}
/**
*
* @Description:更新文档
* @author kang
* @date 2017年1月3日
*/
public void updateDoc(String type, Object id, Object object) {
client.prepareUpdate(index, type, id.toString()).setDoc(JSON.toJSONString(object)).get();
}
/**
*
* @Description:删除文档
* @author kang
* @date 2017年1月3日
*/
public void delDoc(String type, Object id) {
client.prepareDelete(index, type, id.toString()).get();
}
/**
*
* @Description: 分页高亮查询
* @param fields 查询的字段集合
* @author kang
* @date 2017年1月11日
*/
public Page getDocHighLight(String keywords, String type, Set<String> fields, int currentPage, int pageSize, boolean isHighlight) throws Exception {
// 搜索数据
SearchResponse response = client.prepareSearch(index).setTypes(type)//
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)//
.setQuery(QueryBuilders.multiMatchQuery(keywords, fields.toArray(new String[fields.size()]))// 查询所有字段
.analyzer("ik_max_word"))// 分词器
.highlighter(new HighlightBuilder().preTags("<span style=\"color:red\">").postTags("</span>").field("*"))// 高亮标签
.setFrom((currentPage - 1) * pageSize).setSize(pageSize)// 分页
.setExplain(true)// 评分排序
.execute().actionGet();
// 获取查询结果集
SearchHits searchHits = response.getHits();
List<Object> result = Lists.newArrayList();
// 反射填充高亮
for (SearchHit hit : searchHits) {
Map<String, Object> source = hit.getSource();
if (isHighlight) {
// 获取对应的高亮域
Map<String, HighlightField> highlight = hit.getHighlightFields();
for (String field : fields) {
// 从设定的高亮域中取得指定域
HighlightField titleField = highlight.get(field);
if (titleField == null) continue;
// 取得定义的高亮标签
String texts = StringUtils.join(titleField.fragments());
source.put(field, texts);
}
}
result.add(JSON.toJSON(source));
}
return new Page(currentPage, pageSize, (int) searchHits.totalHits(), result);
}
/**
*
* @Description: 重构索引(更新词库之后)
* @author kang
* @date 2017年5月16日
*/
public void reindex() {
SearchResponse scrollResp = client.prepareSearch(index)//
.setScroll(new TimeValue(60000))//
.setQuery(QueryBuilders.matchAllQuery())//
.setSize(100).get(); // max of 100 hits will be returned for
// Scroll until no hits are returned
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
client.prepareIndex(index, hit.getType(), hit.getId()).setSource(hit.getSourceAsString()).execute().actionGet();
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
} while (scrollResp.getHits().getHits().length != 0);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
elasticsearch5 java util 工具类
共23个文件
class:6个
java:5个
properties:3个
4星 · 超过85%的资源 需积分: 49 76 下载量 160 浏览量
2017-09-01
18:36:35
上传
评论 1
收藏 29KB ZIP 举报
温馨提示
java util 工具类java util 工具类java util 工具类java util 工具类java util 工具类java util 工具类java util 工具类java util 工具类java util 工具类java util 工具类
资源推荐
资源详情
资源评论
收起资源包目录
es-test.zip (23个子文件)
es-test
pom.xml 3KB
target
test-classes
classes
META-INF
maven
org.ufo
es-test
pom.xml 3KB
pom.properties 209B
MANIFEST.MF 107B
org
ufo
test
MyTest.class 2KB
MyTest$1.class 1KB
Page.class 2KB
EsUtil.class 3KB
Es.class 9KB
EsFactory.class 2KB
log4j2.properties 184B
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.core.resources.prefs 191B
org.eclipse.jdt.core.prefs 243B
src
test
resources
java
main
resources
log4j2.properties 184B
java
org
ufo
Es.java 5KB
EsUtil.java 3KB
test
MyTest.java 1KB
Page.java 3KB
EsFactory.java 942B
lib
x-pack-transport-5.2.1.jar 7KB
.project 559B
.classpath 1KB
共 23 条
- 1
资源评论
- YH我就是我2019-05-19不错的资源可以使用
- cmuzgb2017-12-06垃圾,不知道从哪拷贝的一些无用的代码来骗人。强烈建议对内容也进行审核,还需要5分,垃圾kang57892018-01-16哪里无用? http://blog.csdn.net/kang5789/article/details/77774299 都是我自己写的 你给我找一个一模一样的
- zhaoshijie1682017-09-25下载了 看看能不能用吧kang57892017-09-26记得jdk8
kang5789
- 粉丝: 36
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功