在es中想要实现类似于如下的功能
select count(distinct(a)) from tableb
- dsl
GET items/_search
{
"query": {
"match_all": {}
},"size": 0,
"aggs": {
"ellis": {
"cardinality": {
"field": "language"
}
}
}
}
其中cardinality是要实现唯一值的字段
- 使用python elasticsearch_dsl 实现
from elasticsearch_dsl import connections,Q
conn = connections.create_connection(hosts=['192.168.214.131'],port=9200, http_auth="elastic:ellischen")
search = Search(index="items",using=conn)
search.extra(size=0)
search.query=Q({"bool":{"must":[{"range":{"language":{"gte":10}}}]}})
search.aggs.metric('ellis', 'cardinality', field='language')
s = search.execute()
print(s.aggregations.ellis.value)
- 使用python elasticsearch 实现
from elasticsearch import Elasticsearch
es = Elasticsearch(hosts=['192.168.214.131'],port=9200, http_auth="elastic:ellischen")
body='''{
"query": {
"bool": {
"must": [
{"range": {
"language": {
"gte": 10
}
}}
]
}
},"size": 0,
"aggs": {
"ellis": {
"cardinality": {
"field": "language"
}
}
}
}'''
print(es.search(body=body,index='items'))