Elasticsearch的使用
我这边是以elasticsearch-2.4.3为例:引入maven
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
1、创建连接器:
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress; import java.net.InetAddress;
import java.net.UnknownHostException; public class EsTcpClient { private static TransportClient client; /**
* 获取TCP 客户端
*
* @return
*/
public static synchronized TransportClient getClient() {
if (client == null) {
build();
}
return client;
} /**
* 关闭客户端
*/
public static void close() {
if (client != null) {
client.close();
}
} /**
* 建立连接
*
* @return
*/
private static void build() {
try {
//特别注意:如果cluster 起了名字,需要在连接时指定名字,否则验证客户端连接的不是默认集群elasticsearch,会忽略,则无法找到节点
Settings settings = Settings.settingsBuilder()
.put("cluster.name", "elasticsearch").build();
// .put("client.transport.ignore_cluster_name", true).build(); // 忽略集群名字验证, 打开后集群名字不对也能连接上
client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName('localhost'), 9300)); } catch (UnknownHostException e) {
throw new RuntimeException(e);
}
} }
impl类
import java.util.ArrayList;
import java.util.List; import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.count.CountResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
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.sort.SortOrder; import com.gky.common.constant.ElasticSearchIndexTypeConstant.IndexType;
import com.gky.common.util.GsonHolder; @SuppressWarnings("deprecation")
public class ElasticSearchTcpDaoImpl{
//TCP连接客户端:
private TransportClient client = null; public ElasticSearchTcpDaoImpl(TransportClient client) {
this.client = client;
}
public TransportClient getClient() {
return client;
} public boolean careateIndex(String Mapperjson, IndexType indexType) {
CreateIndexResponse createIndexResponse = client.admin().indices().prepareCreate(indexType.INDEX()).addMapping(indexType.INDEX(), Mapperjson).get();
return createIndexResponse.isAcknowledged();
} public boolean insert(Object doc,Long id,IndexType indexType) {
String json = GsonHolder.gson.toJson(doc);
IndexResponse response = client.prepareIndex(indexType.INDEX(), indexType.TYPE(), String.valueOf(id)).setSource(json).get();
return response.isCreated();
} public boolean update(Object doc,Long oid,IndexType indexType) {
String json = GsonHolder.gson.toJson(doc); UpdateResponse response = client.prepareUpdate(indexType.INDEX(), indexType.TYPE(), String.valueOf(oid))
.setDoc(json)
.get(); return !response.isCreated();
} public boolean delete(long id,IndexType indexType) {
DeleteResponse response = client.prepareDelete(indexType.INDEX(), indexType.TYPE(), String.valueOf(id)).get(); return response.isFound();
} public Object searchById(Class<?> cls, long id,IndexType indexType) {
GetResponse response = client.prepareGet(indexType.INDEX(), indexType.TYPE(), String.valueOf(id)).get();
if (response.isExists()) {
String json = response.getSourceAsString();
return Gson.gson.fromJson(json, cls);
}
return null;
} public List<Object> searchByUserId(Class<?> cls, long id,IndexType indexType, Integer pageStart, Integer pageSize) {
QueryBuilder filter = new BoolQueryBuilder()
.must(QueryBuilders.termQuery("modifiedId", id));
SearchResponse response = client.prepareSearch(indexType.INDEX())
.setTypes(indexType.TYPE())
.setQuery(filter)
.setFrom(pageStart)
.addSort("addTime", SortOrder.DESC)
.setSize(pageSize)
.execute()
.actionGet();
SearchHit[] hits = response.getHits().getHits();
List<Object> objs = new ArrayList<>();
for (SearchHit hit : hits) {
Object obj= GsonHolder.gson.fromJson(hit.getSourceAsString(), cls);
objs.add(obj);
}
return objs;
} /**
* 全查
*/
public List<Object> searchAll(Class<?> cls,IndexType indexType, Integer pageStart, Integer pageSize,String start,String end,String model,String makeObject,String modifiedName) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(indexType.name().equals("LOGS")){
if (StringUtils.isNotBlank(model)) {
//通配符查询
boolQueryBuilder.must(QueryBuilders.wildcardQuery("model", model));
}
if (StringUtils.isNotBlank(makeObject)) {
//查询解析查询字符串
boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("content"));
}
if (StringUtils.isNotBlank(modifiedName)) {
boolQueryBuilder.must(QueryBuilders.queryStringQuery(modifiedName).field("modifiedName"));
}
}else{
if (StringUtils.isNotBlank(start)) {
//范围内查询
boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").format(start));
}
if (StringUtils.isNotBlank(end)) {
boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").to(end));
}
if (StringUtils.isNotBlank(model)) {
//通配符查询
boolQueryBuilder.must(QueryBuilders.wildcardQuery("model", model));
}
if (StringUtils.isNotBlank(makeObject)) {
//查询解析查询字符串
boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("makeObject"));
}
}
SearchResponse response = client.prepareSearch(indexType.INDEX())
.setTypes(indexType.TYPE())
//.setQuery(QueryBuilders.matchAllQuery())
//.addSort(SortBuilders.fieldSort("addTime").order(SortOrder.DESC))
.addSort("addTime", SortOrder.DESC)
.setFrom(pageStart)
.setSize(pageSize)
.setQuery(boolQueryBuilder)
.execute()
.actionGet(); SearchHit[] hits = response.getHits().getHits();
List<Object> objs = new ArrayList<>();
for (SearchHit hit : hits) {
Object obj= Gson.gson.fromJson(hit.getSourceAsString(), cls);
objs.add(obj);
}
return objs;
}
public List<Object> searchAll(Class<?> cls,IndexType indexType, Integer pageStart, Integer pageSize, String mode) {
QueryBuilder filter = new BoolQueryBuilder()
.must(QueryBuilders.termQuery("searchMode", mode)); SearchResponse response = client.prepareSearch(indexType.INDEX())
.setTypes(indexType.TYPE())
//.setQuery(QueryBuilders.matchAllQuery())
.setQuery(filter)
//.addSort(SortBuilders.fieldSort("addTime").order(SortOrder.DESC))
.addSort("addTime", SortOrder.DESC)
.setFrom(pageStart)
.setSize(pageSize)
.execute()
.actionGet();
SearchHit[] hits = response.getHits().getHits();
List<Object> objs = new ArrayList<>();
for (SearchHit hit : hits) {
Object obj= Gson.gson.fromJson(hit.getSourceAsString(), cls);
objs.add(obj);
}
return objs;
}
public List<Object> searchAll(Class<?> cls,IndexType indexType, Integer pageStart, Integer pageSize, String mode,Object modifierId) {
QueryBuilder filter = new BoolQueryBuilder()
.must(QueryBuilders.termQuery("searchMode", mode))
.must(QueryBuilders.termQuery("modifierId", modifierId));
SearchResponse response = client.prepareSearch(indexType.INDEX())
.setTypes(indexType.TYPE())
//.setQuery(QueryBuilders.matchAllQuery())
.setQuery(filter)
//.addSort(SortBuilders.fieldSort("addTime").order(SortOrder.DESC))
.addSort("addTime", SortOrder.DESC)
.setFrom(pageStart)
.setSize(pageSize)
.execute()
.actionGet();
SearchHit[] hits = response.getHits().getHits();
List<Object> objs = new ArrayList<>();
for (SearchHit hit : hits) {
Object obj= Gson.gson.fromJson(hit.getSourceAsString(), cls);
objs.add(obj);
}
return objs;
} /**
* total
*/
public Integer getTotal(IndexType indexType) {
CountResponse countResponse = client.prepareCount(indexType.INDEX()).setTypes(indexType.TYPE()).get();
Long logt=countResponse.getCount();
return logt.intValue();
}
public Integer getTotal(IndexType indexType,Long oid) {
QueryBuilder filter = new BoolQueryBuilder()
.must(QueryBuilders.termQuery("modifiedId", oid));
CountResponse countResponse = client.prepareCount(indexType.INDEX()).setTypes(indexType.TYPE()).setQuery(filter).get();
Long logt=countResponse.getCount();
return logt.intValue();
}
public Integer getTotal(IndexType indexType,String start,String end,String model,String makeObject,String modifiedName) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(indexType.name().equals("LOG")){
if (StringUtils.isNotBlank(model)) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("modifiyMode", model));
}
if (StringUtils.isNotBlank(makeObject)) {
boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("content"));
}
if (StringUtils.isNotBlank(modifiedName)) {
boolQueryBuilder.must(QueryBuilders.queryStringQuery(modifiedName).field("modifiedName"));
}
}else{
if (StringUtils.isNotBlank(start)) {
boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").format(start));
}
if (StringUtils.isNotBlank(end)) {
boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").to(end));
}
if (StringUtils.isNotBlank(model)) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("model", model));
}
if (StringUtils.isNotBlank(makeObject)) {
boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("makeObject"));
}
} CountResponse countResponse = client.prepareCount(indexType.INDEX()).setTypes(indexType.TYPE()).setQuery(boolQueryBuilder).get();
Long logt=countResponse.getCount();
return logt.intValue();
} }
Gson类
public class Gson {
public static Gson gson; public static JsonParser jsonParser; static {
gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.create(); jsonParser = new JsonParser();
} public static JsonElement getTopLevelElement(String json, String fieldName) {
JsonObject jsonObject = GsonHolder.jsonParser.parse(json).getAsJsonObject();
return jsonObject.get(fieldName);
}
}
Elasticsearch的使用的更多相关文章
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- Elasticsearch 5.0 中term 查询和match 查询的认识
Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...
- 以bank account 数据为例,认识elasticsearch query 和 filter
Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...
- Ubuntu 14.04中Elasticsearch集群配置
Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- .net Elasticsearch 学习入门笔记
一. es安装相关1.elasticsearch安装 运行http://localhost:9200/2.head插件3.bigdesk插件安装(安装细节百度:windows elasticsear ...
- 自己写的数据交换工具——从Oracle到Elasticsearch
先说说需求的背景,由于业务数据都在Oracle数据库中,想要对它进行数据的分析会非常非常慢,用传统的数据仓库-->数据集市这种方式,集市层表会非常大,查询的时候如果再做一些group的操作,一个 ...
- 如何在Elasticsearch中安装中文分词器(IK+pinyin)
如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...
- jar hell & elasticsearch ik 版本问题
想给es 安装一个ik 的插件, 我的es 是 2.4.0, 下载了一个版本是 1.9.5, [2016-10-09 16:56:26,248][INFO ][node ] [node-2] init ...
随机推荐
- WPF的逻辑树与视觉树(2)Visual容器
原文:WPF的逻辑树与视觉树(2)Visual容器 一.摘要 虽然我们平时几乎不会从该类派生,但要想了解视觉树就必须要了解Visual,Visual是一个基本抽象类,继承自DependencyOb ...
- c语言学习笔记(7)——数组
一.为什么需要数组1.为了解决大量同类型的数据存储和使用2.为了模拟现实世界二.数组的分类1.一维数组为n个变量连续分配存储空间所有的变量数据类型必须相同所有变量所占的字节大小必须相等初始化:完全初始 ...
- Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008
Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008 全文索引操作 4.全文索引和like语句比較 1 5.倒排索引 inverted index 1 ...
- 【WPF】DPI对控件定位产生的影响
原文:[WPF]DPI对控件定位产生的影响 需求 程序界面上是一个Window,当用户点击桌面上除此Window之外的任何地方,都要把这个window隐藏掉.程序有个托盘图标,点击托盘图标不能隐藏wi ...
- thinkphp5 的一些笔记
Model里面的一些属性添加 protected $resultSetType = 'collection'; protected $autoWriteTimestamp = 'timestamp'; ...
- Win10中解决Prolific PL2303出现错误代码10的问题
PL2303 是Prolific 公司生产的一种高度集成的RS232-USB接口转换器,在Win10中默认安装的驱动程序会出现错误代码10的问题,如下图所示: 下载Win10上可以用的PL2303驱动 ...
- .Net Core 中使用PetaPoco ,T4生成模版
话不多说,直接上源码. 1.引用NuGet 2.添加T4 <#@ template debug="true" hostspecific="false" l ...
- Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)
下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...
- centos 6.5 搭建ftp 服务器(vsftpd的配置文件说明)
0x00 如何快速的搭建简易的资源发布站 开启简易的python http服务器 1 2 cd /home/your_path python -m SimpleHTTPServer 8000 开启防火 ...
- 我们错过了那么多机会,怎么办(就是预见未来的能力,并且要去做、要去投入,所以要主动学习、储备、选择,要不断的思考)good
那天在IT职业咨询QQ群里聊天,提到腾讯.阿里,我说跟着这两家公司从小到大的朋友,都获得了不菲的回报,成了富翁或者财务自由了. 有群友感叹说:“是啊,我们错过了那么多机会.” 看到这句话,我心里一动, ...