ElasticSearch-java實例

查看全部數據

  • DQLhtml

curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
{
"query": { "match_all": {} }
}'
  • java apijava

QueryBuilder qb = QueryBuilders.matchAllQuery();
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).get();
  • sqlsql

select * from account limit 0,10

分頁查詢(20-40)

  • DQLapi

curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
{
"query": { "match_all": {} },
"from": 20,
"size": 40
}'
  • java apicurl

QueryBuilder qb = QueryBuilders.matchAllQuery();
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).setFrom(20).setSize(20).get();
  • sqlelasticsearch

select * from account limit 20,20

按照字段排序

  • DQLide

curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
{
"query": { "match_all": {} },
"sort": { "age": { "order": "desc" } }
}'
  • java apiui

QueryBuilder qb = QueryBuilders.matchAllQuery();
SortBuilder sb = SortBuilders.fieldSort("age").order(SortOrder.DESC);
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).addSort(sb).get();
  • sqlurl

select * from account order by age desc limit 0,10

指定_source字段

  • DQLcode

  • java api

QueryBuilder qb = QueryBuilders.matchAllQuery();
SearchSourceBuilder ssb = new SearchSourceBuilder();
ssb.docValueField("age");
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).setSource(ssb).get();
  • sql

select age from account

match查詢

  • DQL

curl -XPOST 'localhost:9200/bank/account/_search?pretty' -d '
{
"query": {
    "bool": {
        "should": [
            { "match": { "firstname": "sargent" } },
            { "match": { "lastname": "ayala" } }
        ]
     }
 }
}'
  • java api

QueryBuilder qb1 = QueryBuilders.termQuery("firstname", "sargent");
QueryBuilder qb2 = QueryBuilders.termQuery("lastname", "ayala");
QueryBuilder qb = QueryBuilders.boolQuery().should(qb1).should(qb2);
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setQuery(qb).get();
  • sql

select * from account where firstname = 'sargent' or lastname='ayala' limit 0,10

經過過濾器查詢

  • DQL

curl -XPOST 'localhost:9200/top_user/_search?pretty' -d '
{
    "query": {
        "filtered": {
            "query": { "match_all": {} },
            "filter": {
                "range": {
                    "age": {
                        "gte": 20,
                        "lte": 40
                    }
                }
            }
        }
    }
}'
  • java api

QueryBuilder qb = QueryBuilders.rangeQuery("age").gt(20).lt(40);
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setPostFilter(qb).get();
  • sql

select * from account where age >=20 and age <=40 limit 0,10

聚合查詢

  • DQL

curl -XPOST 'localhost:9200/top_user/_search?pretty' -d '
{
    "size": 0,
    "aggs": {
        "group_by_city": {
            "terms": {
                "field": "age",
                "order":{
                    "_count":"desc"
                }
            }
        }
    }
}'
  • java api

AggregationBuilder aggs = AggregationBuilders.terms("group_by_age").order(Terms.Order.term(false)).field("age");
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setSize(0).addAggregation(aggs).get();
  • sql

select count(*) from account group by age order by count(*) desc

二層聚合

  • DQL

curl -XPOST 'localhost:9200/top_user/_search?pretty' -d '
{
    "size": 0,
    "aggs": {
        "group_by_gender": {
            "terms": {
                "field": "gender",
                "order": {
                    "average_score": "desc"
                }
            },
            "aggs": {
                "average_age": {
                    "avg": {
                        "field": "age"
                    }
                }
            }
        }
    }
}'
  • java api

AggregationBuilder sub = AggregationBuilders.avg("avg_age").field("age");
AggregationBuilder aggs = AggregationBuilders.terms("group_by_gender").field("gender").subAggregation(sub);
SearchResponse searchResponse = client.prepareSearch("bank").setTypes("account").setSize(0).addAggregation(aggs).get();
  • sql

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/

相關文章
相關標籤/搜索