【发布时间】:2019-04-28 09:03:17
【问题描述】:
我有以下运行良好的 python 代码,按预期为我带来了 50 个结果:
elastic = settings.ELASTIC
indexes = u'nginx-access-2769z-2018.11.26.16'
filter_by_client = [
{'match_phrase': {'client_id': '2769z'}},
]
range_for_search = {
'gte': str(1543248611),
'lte': str(1543249511),
'format': 'epoch_second',
}
query_body = {
'from': 0,
'size': 50,
'query': {
'bool': {
'must': filter_by_client,
'filter': {'range': {'@timestamp': range_for_search}},
},
}
}
search_result = elastic.search(index=indexes, body=query_body)
results = [result['_source'] for result in search_result['hits']['hits']]
如果我现在添加另一个过滤器,例如
...
filter_by_client = [
{'match_phrase': {'client_id': '2769z'}},
{'match': {'remote_address': '181.220.174.189'}}
]
...
它也可以正常工作!将其缩小到 5 个结果。
我的问题是:如何在 所有字段 上查询该字符串?如果该字符串位于字段的开头/结尾,如果它是大写,如果该字段实际上是整数/浮点数而不是字符串,对我来说并不重要,...
已经尝试过像这样使用“_all”关键字
...
filter_by_client = [
{'match_phrase': {'client_id': '2769z'}},
{'match': {'_all': '181.220.174.189'}}
]
...
但它给了我 0 个结果。试图重现发生在 Kibana 界面上的相同行为。
【问题讨论】:
-
如elasticsearch文档中提到的
_all是deprecated。改用copy_to 并查询使用copy_to参数索引的自定义字段。
标签: python elasticsearch elastic-stack elasticsearch-py