永远爱学习

导航

elasticsearch Python查询

from elasticsearch import Elasticsearch

es = Elasticsearch(['localhost:9200'])
# results1 = es.get(index="megacorp", doc_type="employee", id=1).get('_source')
# print(results1)

# 查询qx="专业从事es" 或者 "专业从事" 或者 "es"
body = {
"query": {
"terms": {
"qx": [
"专业从事es", "专业从事", "es"
]
}
}
}

# 查询 qx="专业从事es"
body1 = {
"query": {
"term": {
"qx": "专业从事es"
}
}
}

# match:匹配name包含python关键字的数据
body2 = {
"query": {
"match": {
"last_name": "Smith"
}
}
}

# 同样搜索姓氏为 Smith 的雇员,但这次我们只需要年龄大于 30 的
body3 = {

"query": {
"bool": {
"must": {
"match": {
"last_name": "smith"
}
},
"filter": {
"range": {
"age": {"gt": 30}
}
}
}
}
}

# 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤。现在尝试下稍微高级点儿的全文搜索——一项 传统数据库确实很难搞定的任务。
body4 = {
"query": {
"match": {
"about": "rock climbing"
}
}
}

# 找出一个属性中的独立单词是没有问题的,但有时候想要精确匹配一系列单词或者短语 。
# 比如, 我们想执行这样一个查询,仅匹配同时包含 “rock” 和 “climbing” ,
# 并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录。
body5 = {
"query": {
"match_phrase": {
"about": "rock climbing"
}
}
}

# 许多应用都倾向于在每个搜索结果中 高亮 部分文本片段,以便让用户知道为何该文档符合查询条件。在 Elasticsearch 中检索出高亮片段也很容易。
# 再次执行前面的查询,并增加一个新的 highlight 参数:
body6 = {
"query": {
"match_phrase": {
"about": "rock climbing"
}
},
"highlight": {
"fields": {
"about": {}
}
}
}
# 当执行上述body6查询时,返回结果与之前一样,与此同时结果中还多了一个叫做 highlight 的部分。
# 这个部分包含了 about 属性匹配的文本片段,并以 HTML 标签 <em></em> 封装


# 终于到了最后一个业务需求:支持管理者对雇员目录做分析。 Elasticsearch 有一个功能叫聚合(aggregations),
# 允许我们基于数据生成一些精细的分析结果。聚合与 SQL 中的 GROUP BY 类似但更强大。
body7 ={
"query": {
"match": {
"last_name": "smith"
}
},
"aggs": {
"all_interests": {
"terms": {
"field": "age"
}
}
}
}

results = es.search(index='megacorp', doc_type='employee', body=body7)

print(results)

# 只打印source
if len(results['hits']['hits']) > 0:
for item in results['hits']['hits']:
print(item['_source'])

posted on 2018-12-29 15:09  永远爱学习  阅读(166)  评论(0)    收藏  举报