https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
具体参数配置
https://www.cnblogs.com/ginb/p/8716485.html
对方法进行封装
https://blog.csdn.net/ctwy291314/article/details/81218707
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpHost;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.replication.ReplicationResponse;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;
public class ESHighLevelRestUtil {
static RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("x.x.x.x", 9200, "http")));
/**
* 验证索引是否存在
*
* @param index
* 索引名称
* @return
* @throws Exception
*/
public boolean indexExists(String index) throws Exception {
GetIndexRequest request = new GetIndexRequest();
request.indices(index);
request.local(false);
request.humanReadable(true);
boolean exists = client.indices().exists(request);
return exists;
}
/**
*
* @param index
* @param indexType
* @param properties
* 结构: {name:{type:text}} {age:{type:integer}}
* @return
* @throws Exception
*/
public boolean indexCreate(String index, String indexType,
Map<String, Object> properties) throws Exception {
if (indexExists(index)) {
return true;
}
CreateIndexRequest request = new CreateIndexRequest(index);
request.settings(Settings.builder().put("index.number_of_shards", 3)
.put("index.number_of_replicas", 2));
Map<String, Object> jsonMap = new HashMap<>();
Map<String, Object> mapping = new HashMap<>();
mapping.put("properties", properties);
jsonMap.put(indexType, mapping);
request.mapping(indexType, jsonMap);
CreateIndexResponse createIndexResponse = client.indices().create(request);
boolean acknowledged = createIndexResponse.isAcknowledged();
return acknowledged;
}
/**
* 删除索引
*
* @param index
* @return
* @throws Exception
*/
public boolean indexDelete(String index) throws Exception {
try {
DeleteIndexRequest request = new DeleteIndexRequest(index);
DeleteIndexResponse deleteIndexResponse = client.indices().delete(request);
return deleteIndexResponse.isAcknowledged();
} catch (ElasticsearchException exception) {
if (exception.status() == RestStatus.NOT_FOUND) {
return true;
} else {
return false;
}
}
}
/**
* 创建更新文档
*
* @param index
* @param indexType
* @param documentId
* @param josonStr
* @return
* @throws Exception
*/
public boolean documentCreate(String index, String indexType,
String documentId, String josonStr) throws Exception {
IndexRequest request = new IndexRequest(index, indexType, documentId);
request.source(josonStr, XContentType.JSON);
IndexResponse indexResponse = client.index(request);
if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
return true;
}
ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
return true;
}
if (shardInfo.getFailed() > 0) {
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
.getFailures()) {
throw new Exception(failure.reason());
}
}
return false;
}
/**
* 创建更新索引
*
* @param index
* @param indexType
* @param documentId
* @param map
* @return
* @throws Exception
*/
public boolean documentCreate(String index, String indexType,
String documentId, Map<String, Object> map) throws Exception {
IndexRequest request = new IndexRequest(index, indexType, documentId);
request.source(map);
IndexResponse indexResponse = client.index(request);
if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
return true;
}
ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
return true;
}
if (shardInfo.getFailed() > 0) {
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
.getFailures()) {
throw new Exception(failure.reason());
}
}
return false;
}
/**
* 创建索引
*
* @param index
* @param indexType
* @param josonStr
* @return
* @throws Exception
*/
public String documentCreate(String index, String indexType, String josonStr)
throws Exception {
IndexRequest request = new IndexRequest(index, indexType);
request.source(josonStr, XContentType.JSON);
IndexResponse indexResponse = client.index(request);
String id = indexResponse.getId();
if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
return id;
}
ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
return id;
}
if (shardInfo.getFailed() > 0) {
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
.getFailures()) {
throw new Exception(failure.reason());
}
}
return null;
}
/**
* 创建索引
*
* @param index
* @param indexType
* @param map
* @return
* @throws Exception
*/
public String documentCreate(String index, String indexType,
Map<String, Object> map) throws Exception {
IndexRequest request = new IndexRequest(index, indexType);
request.source(map);
IndexResponse indexResponse = client.index(request);
String id = indexResponse.getId();
if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
return id;
}
ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
return id;
}
if (shardInfo.getFailed() > 0) {
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
.getFailures()) {
throw new Exception(failure.reason());
}
}
return null;
}
public boolean documentDelete(String index, String indexType,
String documentId) throws Exception {
DeleteRequest request = new DeleteRequest(index, indexType, documentId);
DeleteResponse deleteResponse = client.delete(request);
if (deleteResponse.getResult() == DocWriteResponse.Result.NOT_FOUND) {
return true;
}
ReplicationResponse.ShardInfo shardInfo = deleteResponse.getShardInfo();
if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
return true;
}
if (shardInfo.getFailed() > 0) {
for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
.getFailures()) {
throw new Exception(failure.reason());
}
}
return false;
}
public Map<String, Object> getDocument(String index, String indexType,String documentId) {
Map<String, Object> sourceAsMap = null;
try {
GetRequest getRequest = new GetRequest(index, //索引
indexType, //类型
documentId);//文档ID
GetResponse getResponse1 = client.get(getRequest);
sourceAsMap = getResponse1.getSourceAsMap();
} catch (Exception e) {
// TODO: handle exception
}
return sourceAsMap;
}
}
使用
@RequestMapping("addIndex.do")
public String createIndex() throws Exception {
ESHighLevelRestUtil util = new ESHighLevelRestUtil();
System.out.println( util.indexExists("indextest001") );
Map<String, Object> map = new HashMap<String,Object>();
map.put("name", new HashMap<String, Object>() {
{
put("type", "text");
}
});
map.put("age", new HashMap<String, Object>() {
{
put("type", "double");
}
});
map.put("sex", new HashMap<String, Object>() {
{
put("type", "double");
}
});
map.put("address", new HashMap<String, Object>() {
{
put("type", "text");
}
});
// 创建主题
util.indexCreate("indextest005", "sx", map);
//创建文档1
System.out.println(util.documentCreate("indextest005", "sx",
new HashMap<String,Object>() {
{
put("name", "名称1");
put("age", 18);
put("sex", 10);
put("address", "地址1");
}
}));
//创建更新文档2
System.out.println(util.documentCreate("indextest005", "sx", "1",
new HashMap<String,Object>() {
{
put("name", "名称2");
put("age", 18);
put("sex", 10);
put("address", "地址2");
}
}));
return "SUCCESS!!!";
}
@RequestMapping("/getIndex.do")
public String getIndex() {
ESHighLevelRestUtil util = new ESHighLevelRestUtil();
Map<String, Object> document = util.getDocument("indextest005", "sx", "1");
System.out.println(document);
return "getIndex";
}
https://blog.csdn.net/A_Story_Donkey/article/details/79667670
1.maven的pom中添加:
-
<dependency>
-
<groupId>org.elasticsearch.client</groupId>
-
<artifactId>elasticsearch-rest-high-level-client</artifactId>
-
<version>6.2.0</version>
-
</dependency>
2.创建elastaicsearch的配置class:
-
import org.apache.http.HttpHost;
-
import org.apache.http.client.config.RequestConfig;
-
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
-
import org.elasticsearch.client.RestClient;
-
import org.elasticsearch.client.RestClientBuilder;
-
import org.elasticsearch.client.RestHighLevelClient;
-
// Java客户端生成工厂
-
public class RestClientFactory{
-
private static final String HOST = "192.168.3.59";
-
private static final int PORT = 9200;
-
private static final String SCHEMA = "http";
-
private static final int CONNECT_TIME_OUT = 1000;
-
private static final int SOCKET_TIME_OUT = 30000;
-
private static final int CONNECTION_REQUEST_TIME_OUT = 500;
-
private static final int MAX_CONNECT_NUM = 100;
-
private static final int MAX_CONNECT_PER_ROUTE = 100;
-
private static HttpHost HTTP_HOST = new HttpHost(HOST,PORT,SCHEMA);
-
private static boolean uniqueConnectTimeConfig = false;
-
private static boolean uniqueConnectNumConfig = true;
-
private static RestClientBuilder builder;
-
private static RestClient restClient;
-
private static RestHighLevelClient restHighLevelClient;
-
static {
-
init();
-
}
-
public static void init(){
-
builder = RestClient.builder(HTTP_HOST);
-
if(uniqueConnectTimeConfig){
-
setConnectTimeOutConfig();
-
}
-
if(uniqueConnectNumConfig){
-
setMutiConnectConfig();
-
}
-
restClient = builder.build();
-
restHighLevelClient = new RestHighLevelClient(builder);
-
}
-
// 主要关于异步httpclient的连接延时配置
-
public static void setConnectTimeOutConfig(){
-
builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
-
@Override
-
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder) {
-
builder.setConnectTimeout(CONNECT_TIME_OUT);
-
builder.setSocketTimeout(SOCKET_TIME_OUT);
-
builder.setConnectionRequestTimeout(CONNECTION_REQUEST_TIME_OUT);
-
return builder;
-
}
-
});
-
/*
-
builder.setRequestConfigCallback(requestConfigBuilder -> {
-
requestConfigBuilder.setConnectTimeout(CONNECT_TIME_OUT);
-
requestConfigBuilder.setSocketTimeout(SOCKET_TIME_OUT);
-
requestConfigBuilder.setConnectionRequestTimeout(CONNECTION_REQUEST_TIME_OUT);
-
return requestConfigBuilder;
-
});
-
*/
-
}
-
/**
-
* 主要关于异步httpclient的连接数配置
-
*/
-
public static void setMutiConnectConfig(){
-
builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
-
@Override
-
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
-
httpAsyncClientBuilder.setMaxConnTotal(MAX_CONNECT_NUM);
-
httpAsyncClientBuilder.setMaxConnPerRoute(MAX_CONNECT_PER_ROUTE);
-
return httpAsyncClientBuilder;
-
}
-
});
-
/*
-
builder.setHttpClientConfigCallback(httpClientBuilder -> {
-
httpClientBuilder.setMaxConnTotal(MAX_CONNECT_NUM);
-
httpClientBuilder.setMaxConnPerRoute(MAX_CONNECT_PER_ROUTE);
-
return httpClientBuilder;
-
});
-
*/
-
}
-
public static RestClient getClient(){
-
return restClient;
-
}
-
public static RestHighLevelClient getHighLevelClient(){
-
if(restHighLevelClient==null){
-
init();
-
}
-
return restHighLevelClient;
-
}
-
public static void close() {
-
if (restHighLevelClient != null) {
-
try {
-
restHighLevelClient.close();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
3.配置实际的demo:
-
import com.alibaba.fastjson.JSON;
-
import com.alibaba.fastjson.JSONObject;
-
import org.elasticsearch.action.ActionListener;
-
import org.elasticsearch.action.index.IndexRequest;
-
import org.elasticsearch.action.index.IndexResponse;
-
import org.elasticsearch.action.search.SearchRequest;
-
import org.elasticsearch.action.search.SearchResponse;
-
import org.elasticsearch.client.RestHighLevelClient;
-
import org.elasticsearch.common.unit.TimeValue;
-
import org.elasticsearch.common.xcontent.XContentType;
-
import org.elasticsearch.index.query.*;
-
import org.elasticsearch.search.SearchHit;
-
import org.elasticsearch.search.SearchHits;
-
import org.elasticsearch.search.builder.SearchSourceBuilder;
-
import org.elasticsearch.search.sort.FieldSortBuilder;
-
import org.elasticsearch.search.sort.SortBuilders;
-
import org.elasticsearch.search.sort.SortOrder;
-
import java.io.IOException;
-
import java.util.Map;
-
import java.util.UUID;
-
import java.util.concurrent.TimeUnit;
-
/**
-
* ClassName: EsIndexDemo
-
* @Description: TODO
-
* @author pengbin
-
* @date 2018/2/26 11:29
-
*/
-
public class EsIndexDemo {
-
/**
-
* 同步获取操作结果
-
*/
-
public static IndexResponse postRequest(String index, String type, String id, String jsonSource)
-
throws Exception {
-
// 构建请求
-
IndexRequest request = new IndexRequest(index, type, id);
-
// 将保存数据以JSON格式关联到请求
-
request.source(jsonSource, XContentType.JSON);
-
// Java客户端发起保存数据请求
-
IndexResponse response = RestClientFactory.getHighLevelClient().index(request);
-
// 等待结果
-
System.out.println(response);
-
return response;
-
}
-
/**
-
* @param keyword1 关键字1
-
* @param keyword2 关键字2
-
* @param startDate 起始时间
-
* @param endDate 终止时间
-
*
-
**/
-
public static SearchResponse pageQueryRequest(String keyword1, String keyword2, String startDate, String endDate,
-
int start, int size){
-
RestHighLevelClient client = RestClientFactory.getHighLevelClient();
-
// 这个sourcebuilder就类似于查询语句中最外层的部分。包括查询分页的起始,
-
// 查询语句的核心,查询结果的排序,查询结果截取部分返回等一系列配置
-
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
-
// 结果开始处
-
sourceBuilder.from(start);
-
// 查询结果终止处
-
sourceBuilder.size(size);
-
// 查询的等待时间
-
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
-
MatchQueryBuilder matchbuilder;
-
matchbuilder = QueryBuilders.matchQuery("message", keyword1+" "+keyword2);
-
// 同时满足两个关键字
-
matchbuilder.operator(Operator.AND);
-
// 查询在时间区间范围内的结果
-
RangeQueryBuilder rangbuilder = QueryBuilders.rangeQuery("date");
-
if(!"".equals(startDate)){
-
rangbuilder.gte(startDate);
-
}
-
if(!"".equals(endDate)){
-
rangbuilder.lte(endDate);
-
}
-
// 等同于bool,将两个查询合并
-
BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
-
boolBuilder.must(matchbuilder);
-
boolBuilder.must(rangbuilder);
-
// 排序
-
FieldSortBuilder fsb = SortBuilders.fieldSort("date");
-
fsb.order(SortOrder.DESC);
-
sourceBuilder.sort(fsb);
-
sourceBuilder.query(boolBuilder);
-
//System.out.println(sourceBuilder);
-
SearchRequest searchRequest = new SearchRequest("request");
-
searchRequest.types("doc");
-
searchRequest.source(sourceBuilder);
-
SearchResponse response = null;
-
try {
-
response = client.search(searchRequest);
-
SearchHits hits= response.getHits();
-
int totalRecordNum= (int) hits.getTotalHits();
-
JSONObject json = new JSONObject();
-
json.put("date","1995-05-16");
-
// Gson gson = new GsonBuilder()
-
// .setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")
-
// .create();
-
for (SearchHit searchHit : hits) {
-
Map<String, Object> source = searchHit.getSourceAsMap();
-
User user = JSON.parseObject(json.toString(),User.class);
-
// Object entity =gson.fromJson(gson.toJson(source),User.class);
-
System.out.println(user);
-
}
-
client.close();
-
} catch (IOException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
return response;
-
}
-
public static void main(String[] args) {
-
String jsonString = "{" + "\"user\":\"xiefg\"," + "\"date\":\"2018-01-12\","
-
+ "\"message\":\"trying out Elasticsearch\"" + "}";
-
try {
-
for (int i=0;i<30;i++){
-
postRequest("request", "doc", UUID.randomUUID()+"", jsonString);
-
}
-
RestClientFactory.close();
-
} catch (Exception e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
}
3.创建test:
ESTest
-
package myProject;
-
import org.junit.Test;
-
public class ESTest {
-
@Test
-
public void queryKeyWorld(){
-
EsIndexDemo.pageQueryRequest("trying","out","2018-01-12","2018-01-12",0,9);
-
}
-
}
public void getQueryDocument(String index, String indexType) {
Map<String, Object> sourceAsMap = null;
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 结果开始处
// sourceBuilder.from(0);
// 查询结果终止处
// sourceBuilder.size(1);
//多条件查询
// MatchPhraseQueryBuilder queryBuilder = QueryBuilders.matchPhraseQuery("title", "站").analyzer("ik_max_word");
// MatchPhraseQueryBuilder queryBuilder1 = QueryBuilders.matchPhraseQuery("content", "一个").analyzer("ik_max_word");
// MatchQueryBuilder analyzer = QueryBuilders.matchQuery("content", "一").analyzer("ik_max_word");
MultiMatchQueryBuilder analyzer = QueryBuilders.multiMatchQuery("非洲一个国家", "content","title").analyzer("ik_max_word");
//sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.query(QueryBuilders.boolQuery()
// .must(queryBuilder)
.must(analyzer));
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.types(indexType);
searchRequest.source(sourceBuilder);
SearchResponse response = null;
try {
response = client.search(searchRequest);
SearchHits hits= response.getHits();
for (SearchHit searchHit : hits) {
System.out.println(searchHit);
sourceAsMap = searchHit.getSourceAsMap();
System.out.println(sourceAsMap);
}
}catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}
}
参考地址:http://blog.csdn.net/u010011737/article/details/79041125