package com.java.es.test;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class EsTest {
//服务器地址以及端口号
private static final String host = 本地或者服务器IP;
private static final int port = 9300;
//控制链接与关闭
private TransportClient client = null;
/**
* 格式化日期
*/
//public static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Test
/**
* 索引:database
* 类型:table
* 字段:author(作者),title(书名),word_count(字数),publish_date(日期)
*/
public void test(){
//CommonTermsQuery: 指定字段进行模糊查询
QueryBuilder builder = QueryBuilders.commonTermsQuery("title","楼");
//queryStringQuery:根据值去每个字段进行模糊查询 +代表必须含有 -代表不能含有
// QueryBuilder builder = QueryBuilders.queryStringQuery("+elasticsearch -学习");
//simpleQueryStringQuery 根据值去每个字段进行模糊查询 只要有一个符合就会返回该文章
//QueryBuilder builder = QueryBuilders.simpleQueryStringQuery("学习 孟凡哲");
SearchResponse response = client.prepareSearch("database").setQuery(builder).get();
SearchHits hits = response.getHits();
for (SearchHit hit:hits
) {
System.out.println(hit.getSourceAsString());
}
}
/**
* 该程序主要想表达的是ES批量插入数据,这里使用了map,假设我们有一堆map数据值,可以使用循环导入到ES中
* 第二个是普通的数据写入方式。我们还可以使用JSON数据格式等,主要还是看我们个人的使用需求
*/
public void test1() throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
BulkRequestBuilder builder = client.prepareBulk();
IndexRequestBuilder reques = client.prepareIndex("database","renyuan","1").setSource(map);
IndexRequestBuilder reques1 = client.prepareIndex("database","renyuan","2").setSource(
XContentFactory.jsonBuilder()
.startObject()
.field("name","lml")
.field("age","23")
.field("sex","男"));
builder.add(reques);
BulkResponse response = builder.get();
System.out.println(response.status());
if (response.hasFailures()){
System.out.println("操作失败");
}
}
@Before
public void before() throws UnknownHostException {
//指定集群
Settings settings = Settings.builder().put("cluster.name","docker-cluster").build();
//创建链接
client = new PreBuiltTransportClient(settings).addTransportAddresses(
new TransportAddress(InetAddress.getByName(host),port));
}
@After
public void close(){
if (client != null) client.close();
}
}
这里 commonTermsQuery 的功能,还需要进行更深的理解。