简介

  本文针对在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应用指南的更多相关文章

  1. Java 脚本化编程指南

    Java 脚本化编程指南 Java脚本化API为谁准备? 脚本语言的一些有用的特性是: 方便:大多数脚本语言都是动态类型的.您通常可以创建新的变量,而不声明变量类型,并且您可以重用变量来存储不同类型的 ...

  2. Java_并发工具包 java.util.concurrent 用户指南(转)

    译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html.本 ...

  3. 《Java性能优化权威指南》

    <Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...

  4. Java多线程编程实战指南(核心篇)读书笔记(五)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  5. Java多线程编程实战指南(核心篇)读书笔记(四)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  6. Java多线程编程实战指南(核心篇)读书笔记(三)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  7. Java多线程编程实战指南(核心篇)读书笔记(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  8. Java多线程编程实战指南(核心篇)读书笔记(一)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76422930冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  9. 《Java多线程编程实战指南(核心篇)》阅读笔记

    <Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...

随机推荐

  1. .NET:“事务、并发、并发问题、事务隔离级别、锁”小议,重点介绍:“事务隔离级别"如何影响 “锁”?

    备注 我们知道事务的重要性,我们同样知道系统会出现并发,而且,一直在准求高并发,但是多数新手(包括我自己)经常忽略并发问题(更新丢失.脏读.不可重复读.幻读),如何应对并发问题呢?和线程并发控制一样, ...

  2. iptables只允许指定ip地址访问指定端口

    首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清除预设表filter中使用者自定链中的规则 其次,设置只允许指定ip地址访问指定端口 ...

  3. 字符串转换成JSON的三种方式

    采用Ajax的项目开发过程中,经常需要将JSON格式的字符串返回到前端,前端解析成JS对象(JSON ).ECMA-262(E3) 中没有将JSON概念写到标准中,但在 ECMA-262(E5) 中J ...

  4. Objective-C:深复制(拷贝)

    深复制:复制对象时,如果对象中包含对象类型的实例变量,要对对象类型的实例变量也要做对象复制.新对象中的对象类型实例变量和旧对象中的对象类型实例变量指的是不同的对象.不管任何一方实例变量对对象做修改,都 ...

  5. OpenCV学习(40) 人脸识别(4)

    在人脸识别模式类中,还实现了一种基于LBP直方图的人脸识别方法.LBP图的原理参照:http://www.cnblogs.com/mikewolf2002/p/3438698.html       在 ...

  6. strtok()函数

    strtok()这个函数大家都应该碰到过,但好像总有些问题, 这里着重讲下它 首先看下MSDN上的解释: char *strtok( char *strToken, const char *strDe ...

  7. iOS开发-UIApplication和App启动状态

    UIApplication简单从字面上了解就是应用程序,开发的时候有的时候会根据需要调用其中的方法,看起来不起眼,实际在iOS开发UIApplication提供了iOS程序运行期间的控制和协作工作.每 ...

  8. 关于vue单页面应用总是先出现主页一闪而过的现象

    问题描述:每次强制刷新登陆页面时,总是会出现主页一闪而过的现象,如果主页上有请求,还会请求后台数据.感觉不太正常,所以想到研究下为什么,然后去掉这个主页一闪而过的现象 1.先看下我之前的app的rou ...

  9. IOS Xib使用——Xib表示局部界面

    Xib文件是一个轻量级的用来描述局部界面的文件,在之前的文章讲解了为控制器添加Xib文件,本节主要讲解一下通过xib文件表示局部界面. <一> 创建Xib文件 Xib文件创建的时候是选择U ...

  10. [转]VirtualBox 修改UUID实现虚拟硬盘复制

    -------------------------------------------------------------------- 原文:https://www.cnblogs.com/find ...