import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import javax.annotation.Resource;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
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.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.junit.Test;
import com.tgram.jcjw.core.model.building.Building;
import com.tgram.jcjw.search.util.ESUtil;
/**
* <p>Description: todo</p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company: 7qb</p>
*
* @author huangleibin
* @version 1.0 2017/8/3
*/
public class ESTest extends BaseTest
{
@Resource(name = "esTransportClient")
private TransportClient client;
@Test
public void test()
{
// SearchResponse response = client.prepareSearch("zs_building").get();
// SearchHits searchHits = response.getHits();
// System.out.println(searchHits.getTotalHits());
//
// searchHits.forEach(searchHitFields -> {
// System.out.print(searchHitFields.getId());
// System.out.print(searchHitFields.getSource().get("id"));
// System.out.println(searchHitFields.getSource().get("bzdz"));
// });
// QueryBuilder query = QueryBuilders.matchPhraseQuery("bzdz", "李圩组21号");
QueryBuilder query = QueryBuilders.termQuery("_id", "-1");
SearchResponse response = client.prepareSearch("zs_building").setQuery(query).setFrom(0).setSize(10).get();
SearchHits searchHits = response.getHits();
System.out.println(searchHits.getTotalHits());
searchHits.forEach(searchHitFields -> {
System.out.print(searchHitFields.getId());
System.out.print(searchHitFields.getSource().get("id"));
System.out.println(searchHitFields.getSource().get("bzdz"));
System.out.println(searchHitFields.getSource().get("lzzt"));
});
}
@Test
public void deleteTest()
{
DeleteResponse response = client.prepareDelete("zs_building", "fulltext", "306").execute().actionGet();
System.out.println(response.getResult());
}
@Test
public void updateTest() throws IOException
{
client.prepareUpdate("zs_building", "fulltext", "306")
.setDoc(jsonBuilder().startObject().field("bzdz", "宿迁市泗洪县归仁镇姜冯村李圩组146号").endObject())
.get();
}
@Test
public void insertTest()
throws IOException, NoSuchMethodException, InvocationTargetException, IllegalAccessException
{
Building building = new Building();
building.setId(-1L);
building.setFjdm("321324");
building.setPcsdm("321324770000");
building.setQxdm("321324");
building.setXzjddm("321324108");
building.setCjwhdm("321324108211");
building.setBzdz("宿迁市泗洪县归仁镇姜冯村李圩组146号");
building.setLzzt(5);
building.setLzbj(1);
building.setLzlx(3);
building.setSfsc(0);
building.setDzlx(1);
building.setSfls(0);
// System.out.println(save(building, client, building.getId()));
// Class clazz = building.getClass();
// ESDocument esDocument = (ESDocument) clazz.getAnnotation(ESDocument.class);
// Field[] fields = clazz.getDeclaredFields();
//
// XContentBuilder builder = jsonBuilder().startObject();
// for (Field field : fields)
// {
// ESField esField = field.getAnnotation(ESField.class);
// if (esField == null)
// {
// continue;
// }
// String fieldName = field.getName();
// if ("serialVersionUID".equals(fieldName))
// {
// continue;
// }
// String firstLetter = fieldName.substring(0, 1).toUpperCase();
// String getter = "get" + firstLetter + fieldName.substring(1);
// Method method = building.getClass().getMethod(getter);
// Object value = method.invoke(building);
// builder.field(fieldName, value);
// }
// builder.endObject();
//
// IndexResponse response = client.prepareIndex(esDocument.indexName(), esDocument.type(), building.getId().toString()).setSource(builder).get();
// System.out.println(response.status());
}
/**
* 聚合测试
*/
@Test
public void testAggregation()
{
QueryBuilder query = QueryBuilders.matchQuery("bzdz", "张庄组");
SearchResponse response = client.prepareSearch("zs_building")
.addAggregation(AggregationBuilders.terms("lzzt").field("lzzt"))
.addAggregation(AggregationBuilders.terms("lzbj").field("lzbj"))
.addAggregation(AggregationBuilders.terms("lzlx").field("lzlx"))
.addAggregation(AggregationBuilders.terms("sfls").field("sfls"))
.addAggregation(AggregationBuilders.terms("dzlx").field("dzlx"))
.addAggregation(AggregationBuilders.terms("fjdm").field("fjdm"))
.addAggregation(AggregationBuilders.terms("pcsdm").field("pcsdm"))
.addAggregation(AggregationBuilders.terms("qxdm").field("qxdm"))
.addAggregation(AggregationBuilders.terms("xzjddm").field("xzjddm"))
.addAggregation(AggregationBuilders.terms("cjwhdm").field("cjwhdm"))
.addAggregation(AggregationBuilders.terms("jlxdm").field("jlxdm"))
.setQuery(query)
.execute()
.actionGet();
Terms terms = response.getAggregations().get("lzzt");
terms.getBuckets().forEach(bucket -> System.out.println(bucket.getKey() + " " + bucket.getDocCount()));
terms = response.getAggregations().get("fjdm");
terms.getBuckets().forEach(bucket -> System.out.println(bucket.getKey() + " " + bucket.getDocCount()));
terms = response.getAggregations().get("qxdm");
terms.getBuckets().forEach(bucket -> System.out.println(bucket.getKey() + " " + bucket.getDocCount()));
}
@Test
public void testObj() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
QueryBuilder query = QueryBuilders.termQuery("_id", "1721544");
SearchResponse response = client.prepareSearch("zs_building").setQuery(query).setFrom(0).setSize(10).get();
SearchHits searchHits = response.getHits();
for (SearchHit hit : searchHits)
{
Building building = (Building) ESUtil.searchHitToObj(new Building(), hit);
System.out.println(building.getBzdz());
}
}
@Test
public void lplTest()
{
//根据 任务id分组进行求和
SearchRequestBuilder sbuilder = client.prepareSearch("zs_resident");
//根据taskid进行分组统计,统计出的列别名叫sum
TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("hjlx");
sbuilder.addAggregation(termsBuilder);
SearchResponse responses = sbuilder.execute().actionGet();
//得到这个分组的数据集合
Terms terms = responses.getAggregations().get("sum");
for (int i = 0; i < terms.getBuckets().size(); i++)
{
//statistics
String id = terms.getBuckets().get(i).getKey().toString();//id
Long sum = terms.getBuckets().get(i).getDocCount();//数量
System.out.println(
"==" + terms.getBuckets().get(i).getDocCount() + "------" + terms.getBuckets().get(i).getKey());
}
//分别打印出统计的数量和id值
}
}