elasticsearch的集中常见操作
1.引入dependency
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> <version>1.4.0.M1</version> </dependency>
2:创建\添加索引
{ "_index": "yananindex", "_type": "yanantype", "_id": "4", "_score": 1, "_source": { "name": "zhangyanan4", "gender": "male", "id": 4 } } , { "_index": "yananindex", "_type": "yanantype", "_id": "5", "_score": 1, "_source": { "name": "zhangyanan5", "gender": "male", "id": 5 } } , { "_index": "yananindex", "_type": "yanantype", "_id": "6", "_score": 1, "_source": { "name": "zhangyanan6", "gender": "male", "id": 6 } } , { "_index": "yananindex", "_type": "yanantype", "_id": "1", "_score": 1, "_source": { "name": "zhangyanan1", "gender": "female", "id": 1 } } , { "_index": "yananindex", "_type": "yanantype", "_id": "2", "_score": 1, "_source": { "name": "zhangyanan2", "gender": "female", "id": 2 } } , { "_index": "yananindex", "_type": "yanantype", "_id": "7", "_score": 1, "_source": { "name": "zhangyanan7", "gender": "male", "id": 7 } } , { "_index": "yananindex", "_type": "yanantype", "_id": "3", "_score": 1, "_source": { "name": "zhangyanan3", "gender": "female", "id": 3 } }
3.创建实体类
package testweb; import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName="yananindex",type="yanantype") public class Yanan { private int id; private String name; private String gender; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
准备工作做完了,下面开始测试
4.queryForObject\queryForList\聚合查询\统计数量\判断索引是否存在\删除指定id的索引
package testweb; import java.util.List; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder; import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.ResultsExtractor; import org.springframework.data.elasticsearch.core.query.GetQuery; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; public class TestES { static TransportClient transportClient; static ElasticsearchTemplate elasticsearchTemplate; public static void main(String[] args) { elasticsearchTemplate=getElasticsearchTemplate("localhost","elasticsearch_bak",9303); //queryForObject();//根据索引id查询文档 //queryForList(); //aggregationQuery();//聚合查询 //count(); //indexExists(Yanan.class); deleteById(); } private static void deleteById() { // IndexQueryBuilder indexquery=new IndexQueryBuilder().withId("1").withObject(Yanan.class); //String delete = elasticsearchTemplate.delete("yananindex", "yanantype", "10");//索引的id String delete = elasticsearchTemplate.delete(Yanan.class, "10");//索引的id System.out.println(delete);//删除的索引的id } private static void indexExists(Class<Yanan> clazz) { if(elasticsearchTemplate.indexExists(clazz)){ System.out.println("true"); }else{ System.out.println(false); } } private static void count() { NativeSearchQueryBuilder searchQuery=new NativeSearchQueryBuilder(); BoolQueryBuilder bqb = QueryBuilders.boolQuery(); bqb.must(QueryBuilders.termQuery("gender","female")); searchQuery.withIndices("yananindex").withQuery(bqb); long count = elasticsearchTemplate.count(searchQuery.build()); System.out.println(count); } private static void aggregationQuery() { TermsBuilder termsBuilder = AggregationBuilders.terms("maleCount").field("name").size(10); NativeSearchQueryBuilder searchQuery=new NativeSearchQueryBuilder(); BoolQueryBuilder bqb = QueryBuilders.boolQuery(); bqb.must(QueryBuilders.termQuery("gender","male")); searchQuery.withIndices("yananindex").withQuery(bqb).addAggregation(termsBuilder); Aggregations aggregations = elasticsearchTemplate.query(searchQuery.build(), new ResultsExtractor<Aggregations>() { @Override public Aggregations extract(SearchResponse response) { return response.getAggregations(); } }); StringTerms modelTerms = (StringTerms)aggregations.asMap().get("maleCount"); List<Bucket> buckets = modelTerms.getBuckets(); for(int i=0;i<buckets.size();i++){ System.out.println(buckets.get(i).getKey()+"\t"+buckets.get(i).getDocCount()); } } private static void queryForList() { NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder(); BoolQueryBuilder bqb = QueryBuilders.boolQuery(); bqb.must(QueryBuilders.termQuery("gender","male")); searchQuery.withIndices("yananindex").withQuery(bqb); List<Yanan> list = elasticsearchTemplate.queryForList(searchQuery.build(), Yanan.class); for(int i=0;i<list.size();i++){ Yanan yanan = list.get(i); System.out.println(yanan.getName()+"\t"+yanan.getGender()+"\t"+yanan.getId()); } } private static void queryForObject() { GetQuery query = new GetQuery(); query.setId("1");// 索引的id Yanan yanan = elasticsearchTemplate.queryForObject(query, Yanan.class); System.out.println(yanan.getGender()); System.out.println(yanan.getName()); System.out.println(yanan.getId());// 实体的id } static ElasticsearchTemplate getElasticsearchTemplate(String ip,String clusterName,int port){//<a href="http://blog.csdn.net/ty4315/article/details/52434296" target="_blank">@参考文章1</a>,<a href="http://blog.csdn.net/ljc2008110/article/details/48630609" target="_blank">@参考文章2</a> Settings setting = ImmutableSettings.settingsBuilder().put("cluster.name", clusterName)// 指定集群名称 .put("client.transport.sniff", true)// 启动嗅探功能,客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。 .build(); // 创建客户端 通过setting来创建,若不指定则默认链接的集群名为elasticsearch 链接使用tcp协议即9303 transportClient = new TransportClient(setting); TransportAddress transportAddress = new InetSocketTransportAddress(ip, port); transportClient.addTransportAddresses(transportAddress); elasticsearchTemplate = new ElasticsearchTemplate(transportClient); return elasticsearchTemplate; } }
本文来自博客园,作者:每天都要学一点,欢迎讨论和转载,转载请注明原文链接:https://www.cnblogs.com/yanan7890/p/6652200.html