Files
opensearch-pyd/example/queries.py
T
2019-05-11 09:41:48 -06:00

97 lines
2.5 KiB
Python

#!/usr/bin/env python
from __future__ import print_function
import logging
from dateutil.parser import parse as parse_date
from elasticsearch import Elasticsearch
def print_search_stats(results):
print("=" * 80)
print(
"Total %d found in %dms" % (results["hits"]["total"]["value"], results["took"])
)
print("-" * 80)
def print_hits(results):
" Simple utility function to print results of a search query. "
print_search_stats(results)
for hit in results["hits"]["hits"]:
# get created date for a repo and fallback to authored_date for a commit
created_at = parse_date(
hit["_source"].get("created_at", hit["_source"]["authored_date"])
)
print(
"/%s/%s/%s (%s): %s"
% (
hit["_index"],
hit["_type"],
hit["_id"],
created_at.strftime("%Y-%m-%d"),
hit["_source"]["description"].split("\n")[0],
)
)
print("=" * 80)
print()
# get trace logger and set level
tracer = logging.getLogger("elasticsearch.trace")
tracer.setLevel(logging.INFO)
tracer.addHandler(logging.FileHandler("/tmp/es_trace.log"))
# instantiate es client, connects to localhost:9200 by default
es = Elasticsearch()
print("Empty search:")
print_hits(es.search(index="git"))
print('Find commits that says "fix" without touching tests:')
result = es.search(
index="git",
body={
"query": {
"bool": {
"must": {"match": {"description": "fix"}},
"must_not": {"term": {"files": "test_elasticsearch"}},
}
}
},
)
print_hits(result)
print("Last 8 Commits for elasticsearch-py:")
result = es.search(
index="git",
body={
"query": {"term": {"repository": "elasticsearch-py"}},
"sort": [{"committed_date": {"order": "desc"}}],
"size": 8,
},
)
print_hits(result)
print("Stats for top 10 committers:")
result = es.search(
index="git",
body={
"size": 0,
"aggs": {
"committers": {
"terms": {"field": "committer.name.keyword"},
"aggs": {"line_stats": {"stats": {"field": "stats.lines"}}},
}
},
},
)
print_search_stats(result)
for committer in result["aggregations"]["committers"]["buckets"]:
print(
"%15s: %3d commits changing %6d lines"
% (committer["key"], committer["doc_count"], committer["line_stats"]["sum"])
)
print("=" * 80)