Java下Elasticsearh应用指南
简介
本文针对在Java下操作elasticsearch给出应用示例,主要涉及创建连接,构建索引以及检索数据3个部分。
环境
1)elasticsearch2.4.4,
2)jdk1.8。
客户端连接
import java.net.InetAddress;
import java.net.UnknownHostException; import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class Client {
private static Logger logger = LoggerFactory.getLogger(Client.class);
private static Settings settings = Settings.settingsBuilder()
.put("cluster.name", "app").build(); /**
* only one address
* @param ipAddress
* @return
*/
public static TransportClient initClient(String ipAddress) {
TransportClient client = null;
try {
client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName(ipAddress), 9300));
logger.info("client start up", ipAddress);
} catch (UnknownHostException e) {
e.printStackTrace();
logger.error(ipAddress, e.getMessage());
} return client;
} /**
* has more addresses
* @param ipAddress
* @return
*/
public static TransportClient initClient(String[] ipAddress) {
TransportClient client = null;
try {
client = TransportClient.builder().settings(settings).build();
for (String ip : ipAddress) {
client.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName(ip), 9300));
}
} catch (UnknownHostException e) {
logger.error(ipAddress.toString(), e.getMessage());
} return client;
} public static void close(TransportClient client) {
if (client != null) {
client.close();
}
} }
创建索引
import java.util.Map; import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Index {
private static Logger logger = LoggerFactory.getLogger(Index.class); /**
* create index before mapping
* @param client
* @param indexName
*/
public static void indexCreate(TransportClient client, String indexName) {
deleteIndex(client, indexName);
client.admin().indices()
.create(new CreateIndexRequest(indexName))
.actionGet();
} /**
* set the mapping for index
* @param client
* @param indexName
* @param docName
* @return
*/
public static PutMappingResponse indexMapping(TransportClient client, String indexName,
String docName) {
indexCreate(client, indexName);
PutMappingResponse response = client.admin().indices()
.preparePutMapping(indexName)
.setType(docName)
.setSource(getMapping(docName))
.execute()
.actionGet(); return response;
} /**
* index for target data
* @param client
* @param indexName
* @param docName
* @param data
* @return
*/
public static IndexResponse createIndexResponse(TransportClient client,
String indexName, String docName, Map<String, String> data) {
IndexResponse response = client.prepareIndex(indexName, docName)
.setSource(data)
.execute()
.actionGet(); return response;
} public static void deleteIndex(TransportClient client, String indexName) {
IndicesExistsResponse isExistsResponse = client.admin().indices()
.exists(new IndicesExistsRequest(indexName))
.actionGet();
if (isExistsResponse.isExists()) {
client.admin().indices()
.delete(new DeleteIndexRequest(indexName))
.actionGet();
}
} }
检索索引
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.lucene.index.Fields;
import org.apache.lucene.index.PostingsEnum;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.BytesRef;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.termvectors.TermVectorsResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class Search {
private static Logger logger = LoggerFactory.getLogger(Search.class); /**
* get the search response with the index and document for keyword
* @param client
* @param indexName
* @param docName
* @param field
* @param keyword
* @return
*/
public static SearchResponse getSearchResponse(TransportClient client,
String indexName, String docName, String field, String keyword) {
SearchResponse response = client.prepareSearch(indexName)
.setTypes(docName)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(QueryBuilders.matchQuery(field, keyword))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet(); return response;
} /**
* get the terms vector for the target field
* @param client
* @param indexName
* @param docName
* @param docID
* @return
*/
public static TermVectorsResponse getTermVectorResponse(TransportClient client,
String indexName, String docName, String docID, String field) {
TermVectorsResponse response = client
.prepareTermVectors(indexName, docName, docID)
.setSelectedFields(field)
.setPositions(true)
.setOffsets(true)
.execute().actionGet();
return response;
} /**
* get the match String for target field
* @param response
* @param field
* @return
*/
public static Map<String, String> getMatchField(SearchResponse response,
String field) {
long total = 0;
Map<String, String> map = null;
if (response != null) {
SearchHits hits = response.getHits();
if (hits != null) {
total = hits.getTotalHits();
if (total > 0) {
map = new HashMap<String, String>();
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
String value = (String)hit.getSource().get(field);
String id = hit.getId();
map.put(id, value);
}
}
}
} return map;
}
}
作者:志青云集
出处:http://www.cnblogs.com/lyssym
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【志青云集】。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则将依法追究法律责任。
Java下Elasticsearh应用指南的更多相关文章
- Java 脚本化编程指南
Java 脚本化编程指南 Java脚本化API为谁准备? 脚本语言的一些有用的特性是: 方便:大多数脚本语言都是动态类型的.您通常可以创建新的变量,而不声明变量类型,并且您可以重用变量来存储不同类型的 ...
- Java_并发工具包 java.util.concurrent 用户指南(转)
译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html.本 ...
- 《Java性能优化权威指南》
<Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(四)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(三)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- 《Java多线程编程实战指南(核心篇)》阅读笔记
<Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...
随机推荐
- python接口自动化4-绕过验证码登录(cookie)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...
- Windows怎样实时同步文件夹?Java+Spring+Quartz+Tomcat集群实现
我有一台服务器上加了两块硬盘.其中有个目录下的数据非常重要.假设是D:\data目录.这个目录下有几十个G的文件. 我希望能把这个文件夹里的内容同步到另一块硬盘的目录下,假设是E:\data 我希望最 ...
- eclipse3.4配置的tomcat server如何部署以前的web项目?
1. 打开.project文件,在<natures>元素中加入 <nature>org.eclipse.wst.common.project.facet.core.nature ...
- android破解
1.adb shell dumpsys activity top 能够获取到当前程序的Activity信息 2.1.在invoke-static/invoke-virtual指令他的返回类型是V之后可 ...
- MySQL冷知识
问题:在网站后台添加了扩展字段后,对于数据库表不太熟悉的,可能会花较长时间查找,如何有效提高我们的工作效率呢? 解决方法:利用SQL语句来查询字段所在的表
- Linux获取当前时间
代码(可以把clock_gettime换成time(NULL)) void getNowTime() { timespec time; clock_gettime(CLOCK_REALTIME, &a ...
- java 中的resultset的类型
结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等. 结果集读取数据 ...
- android.net.Uri 简介 API
android.net.Uri 简介 public abstract class android.net.Uri extends Object implements Parcelable, Compa ...
- 配置sonarqube+maven
Maven与Sonar配合使用 准备工作:下载sonarqube源码即可 步骤: 1).安装sonar 解压,启动sonarqube-4.1\bin\windows-x86-32目录下的 ...
- .Net垃圾收集机制—了解算法与代龄
垃圾收集器在本质上就是负责跟踪所有对象被引用到的地方,关注对象不再被引用的情况,回收相应的内存.在.NET平台中同样如此,有效的提高.NET垃圾回收性能,能够提高程序执行效率. 其实垃圾收集并不是伴随 ...