[关闭]
@1234567890 2017-05-22T13:38:11.000000Z 字数 3305 阅读 1898

ElasticSearch-java实例

ES


查看所有数据

  1. curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
  2. {
  3. "query": { "match_all": {} }
  4. }'
  1. QueryBuilder qb = QueryBuilders.matchAllQuery();
  2. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).get();
  1. select * from account limit 0,10

分页查询(20-40)

  1. curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
  2. {
  3. "query": { "match_all": {} },
  4. "from": 20,
  5. "size": 40
  6. }'
  1. QueryBuilder qb = QueryBuilders.matchAllQuery();
  2. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).setFrom(20).setSize(20).get();
  1. select * from account limit 20,20

按照字段排序

  1. curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
  2. {
  3. "query": { "match_all": {} },
  4. "sort": { "age": { "order": "desc" } }
  5. }'
  1. QueryBuilder qb = QueryBuilders.matchAllQuery();
  2. SortBuilder sb = SortBuilders.fieldSort("age").order(SortOrder.DESC);
  3. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).addSort(sb).get();
  1. select * from account order by age desc limit 0,10

指定_source字段

  1. QueryBuilder qb = QueryBuilders.matchAllQuery();
  2. SearchSourceBuilder ssb = new SearchSourceBuilder();
  3. ssb.docValueField("age");
  4. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).setSource(ssb).get();
  1. select age from account

match查询

  1. curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
  2. {
  3. "query": {
  4. "bool": {
  5. "should": [
  6. { "match": { "firstname": "sargent" } },
  7. { "match": { "lastname": "ayala" } }
  8. ]
  9. }
  10. }
  11. }'
  1. QueryBuilder qb1 = QueryBuilders.termQuery("firstname", "sargent");
  2. QueryBuilder qb2 = QueryBuilders.termQuery("lastname", "ayala");
  3. QueryBuilder qb = QueryBuilders.boolQuery().should(qb1).should(qb2);
  4. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).get();
  1. select * from account where firstname = 'sargent' or lastname='ayala' limit 0,10

通过过滤器查询

  1. curl -XPOST 'localhost:9200/top_user/_search?pretty' -d '
  2. {
  3. "query": {
  4. "filtered": {
  5. "query": { "match_all": {} },
  6. "filter": {
  7. "range": {
  8. "age": {
  9. "gte": 20,
  10. "lte": 40
  11. }
  12. }
  13. }
  14. }
  15. }
  16. }'
  1. QueryBuilder qb = QueryBuilders.rangeQuery("age").gt(20).lt(40);
  2. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setPostFilter(qb).get();
  1. select * from account where age >=20 and age <=40 limit 0,10

聚合查询

  1. curl -XPOST 'localhost:9200/top_user/_search?pretty' -d '
  2. {
  3. "size": 0,
  4. "aggs": {
  5. "group_by_city": {
  6. "terms": {
  7. "field": "age",
  8. "order":{
  9. "_count":"desc"
  10. }
  11. }
  12. }
  13. }
  14. }'
  1. AggregationBuilder aggs = AggregationBuilders.terms("group_by_age").order(Terms.Order.term(false)).field("age");
  2. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setSize(0).addAggregation(aggs).get();
  1. select count(*) from account group by age order by count(*) desc

二层聚合

  1. curl -XPOST 'localhost:9200/top_user/_search?pretty' -d '
  2. {
  3. "size": 0,
  4. "aggs": {
  5. "group_by_gender": {
  6. "terms": {
  7. "field": "gender",
  8. "order": {
  9. "average_score": "desc"
  10. }
  11. },
  12. "aggs": {
  13. "average_age": {
  14. "avg": {
  15. "field": "age"
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }'
  1. AggregationBuilder sub = AggregationBuilders.avg("avg_age").field("age");
  2. AggregationBuilder aggs = AggregationBuilders.terms("group_by_gender").field("gender").subAggregation(sub);
  3. SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setSize(0).addAggregation(aggs).get();
  1. select avg(age) as avg_age from account group by gender order by avg_age desc

ES 工作原理

工作原理

7. ES对外接口

官网DSL
官网java-API

ES遇到问题怎么办?

  1. 国外:https://discuss.elastic.co/
  2. 国内:http://elasticsearch.cn/
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注