Elasticsearch 查询 - 根据其他字段打印特定字段
Elasticsearch query - print certain field based on other field
我的目标是在一个字段中找到最大值并在这个找到的文档中打印另一个字段。
到目前为止我的查询:
{
"fields": ["text"], //NOT WORKING
"query": {
"query_string": {
"query": "_type:bmw AND _exists_:car_type",
"analyze_wildcard": True
}
},
"size": 0,
"aggs": {
"2": {
"terms": {
"field": "compound",
"size": 5,
"order": {
"2-orderAgg": "desc"
}
},
"aggs": {
"2-orderAgg": {
"max": {
"field": "compound"
}
}
}
}
}
}
结果是
'buckets': [{'doc_count': 1, '2-orderAgg': {'value': 0.8442}, 'key': 0.8442}, {'doc_count': 1, '2-orderAgg': {'value': 0.7777}, 'key': 0.7777}, {'doc_count': 1, '2-orderAgg': {'value': 0.7579}, 'key': 0.7579}, {'doc_count': 1, '2-orderAgg': {'value': 0.6476}, 'key': 0.6476}, {'doc_count': 1, '2-orderAgg': {'value': 0.6369}, 'key': 0.6369}]
现在我需要打印文档中的 text
字段包含 compound
值 0.8442 等等。谢谢您的建议。
我通过一个小的变通方法实现了这一点。它并不漂亮,但最终我得到了我想要的。
首先,我使用了第一个查询的响应。然后我从那些字典中抓取了所有 keys
并执行新查询以查找特定文档的 id
.
{
"size": 0,
"query": {
"query_string": {
"analyze_wildcard": True,
"query": "_type:bmw AND compound:"+str(0.8442)+" AND _exists_:car_type"
}
},
"aggs": {
"3": {
"terms": {
"field": "id_str",
"size": 20,
"order": {
"_count": "desc"
}
}
}
}
}
而不是通过此 id
字段遍历响应和搜索文档
for y in res1:
res3 = es.search(index='indexname', body={
"size" : 1,
"query": {
"bool": {
"must": [
{
"match": {
"id_str": y['key']
}
}
]
}
}
})
for x in res3['hits']['hits']:
print (x['_source']['text'])
现在结果是
Diamond stitch leather is a great addition to any custom vehicle. Prices start from 2k! @bmw i8 getting under car...
这是我想要的文字。
我的目标是在一个字段中找到最大值并在这个找到的文档中打印另一个字段。 到目前为止我的查询:
{
"fields": ["text"], //NOT WORKING
"query": {
"query_string": {
"query": "_type:bmw AND _exists_:car_type",
"analyze_wildcard": True
}
},
"size": 0,
"aggs": {
"2": {
"terms": {
"field": "compound",
"size": 5,
"order": {
"2-orderAgg": "desc"
}
},
"aggs": {
"2-orderAgg": {
"max": {
"field": "compound"
}
}
}
}
}
}
结果是
'buckets': [{'doc_count': 1, '2-orderAgg': {'value': 0.8442}, 'key': 0.8442}, {'doc_count': 1, '2-orderAgg': {'value': 0.7777}, 'key': 0.7777}, {'doc_count': 1, '2-orderAgg': {'value': 0.7579}, 'key': 0.7579}, {'doc_count': 1, '2-orderAgg': {'value': 0.6476}, 'key': 0.6476}, {'doc_count': 1, '2-orderAgg': {'value': 0.6369}, 'key': 0.6369}]
现在我需要打印文档中的 text
字段包含 compound
值 0.8442 等等。谢谢您的建议。
我通过一个小的变通方法实现了这一点。它并不漂亮,但最终我得到了我想要的。
首先,我使用了第一个查询的响应。然后我从那些字典中抓取了所有 keys
并执行新查询以查找特定文档的 id
.
{
"size": 0,
"query": {
"query_string": {
"analyze_wildcard": True,
"query": "_type:bmw AND compound:"+str(0.8442)+" AND _exists_:car_type"
}
},
"aggs": {
"3": {
"terms": {
"field": "id_str",
"size": 20,
"order": {
"_count": "desc"
}
}
}
}
}
而不是通过此 id
字段遍历响应和搜索文档
for y in res1:
res3 = es.search(index='indexname', body={
"size" : 1,
"query": {
"bool": {
"must": [
{
"match": {
"id_str": y['key']
}
}
]
}
}
})
for x in res3['hits']['hits']:
print (x['_source']['text'])
现在结果是
Diamond stitch leather is a great addition to any custom vehicle. Prices start from 2k! @bmw i8 getting under car...
这是我想要的文字。