简介

  本文针对在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. 企业应用:C/S 开发需要考虑的事项

    备注 几乎没有做过 C/S 方面的开发(有 RIA 方面的开发经验),此文纯属个人胡思乱想,写下来是希望朋友们多给点意见. C/S 开发注意事项 C/S 开发需要注意如下几点: 采用何种模式组织 UI ...

  2. 在MyEclipse中修改类不重启tomcat

    今天因为在调试一个程序,因为工程中用到spring,每次修改类代码时都要重启服务器,搞得很郁闷,于是上网找找有没有可以让java代码每次修改之后 直接加载到服务器的,找了一些还果真有,不过有些方法我试 ...

  3. [翻译] AnimatedPath 动画路径(持续更新)

    AnimatedPath动画路径 感谢原作者分享精神,有空补上使用教程 https://github.com/twotoasters/AnimatedPath AnimatedPath explore ...

  4. jQuery元素属性attr设置多个键值或函数 删除属性removeAttr

    $("Element").attr(name) '取得第一个匹配的属性值,比如$("img").attr("src") $("El ...

  5. 【Github教程】史上最全github使用方法:github入门到精通

    原文 http://www.eoeandroid.com/thread-274556-1-1.html git pull 命令 git pull <remote> <branch&g ...

  6. C柔性数组

    柔性数组成员 柔性数组 .允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存. .包含柔性数组成员的结构要使用malloc()函数进行内存的动态分配.分配的内存大于结 ...

  7. cookie.setPath()的用法

    正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得.1.可在同一应用服务器内共享方法:设置cookie.setPath("/");    本机tomc ...

  8. jquery中filter(fn)的使用研究

    jquery中filter(fn)给出的官方说明是: 筛选出与指定函数返回值匹配的元素集合 这个函数内部将对每个对象计算一次 (正如 '$.each'). 如果调用的函数返回false则这个元素被删除 ...

  9. 手写一个自己的LocalCache - 基于LinkedHashMap实现LRU

    功能目标      实现一个全局范围的LocalCache,各个业务点使用自己的Namespace对LocalCache进行逻辑分区.所以在LocalCache中进行读写採用的key为(namespa ...

  10. Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2016-07-20 16:27:34.873, end time: 2016-07-20 16:27:39.895, client elapsed: 0 ms

    方案一: 重启dubbo连接 zookeeper 方案二: 经压测,greys跟踪得知,是dubbo的monitor的问题.主要超时的方法是dubbo的getIP方法,monitor每次收集数据的时候 ...