- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试运行 a multi search request在 Elasticsearch Python 客户端上。我可以正确运行单一搜索,但无法弄清楚如何格式化 msearch 请求。根据文档,请求的正文需要格式化为:
The request definitions (metadata-search request definition pairs), as either a newline separated string, or a sequence of dicts to serialize (one per row).
创建此请求正文的最佳方法是什么?我一直在寻找示例,但似乎找不到任何示例。
最佳答案
如果您按照 official doc 的演示进行操作(甚至认为它是针对 BulkAPI 的),您会发现如何使用 Elasticsearch
客户端在 python 中构造您的请求:
这里是换行分隔字符串的方式:
def msearch():
es = get_es_instance()
search_arr = []
# req_head
search_arr.append({'index': 'my_test_index', 'type': 'doc_type_1'})
# req_body
search_arr.append({"query": {"term" : {"text" : "bag"}}, 'from': 0, 'size': 2})
# req_head
search_arr.append({'index': 'my_test_index', 'type': 'doc_type_2'})
# req_body
search_arr.append({"query": {"match_all" : {}}, 'from': 0, 'size': 2})
request = ''
for each in search_arr:
request += '%s \n' %json.dumps(each)
# as you can see, you just need to feed the <body> parameter,
# and don't need to specify the <index> and <doc_type> as usual
resp = es.msearch(body = request)
可以看到,final-request是由几个req_unit构成的。每个 req_unit 结构如下所示:
request_header(search control about index_name, optional mapping-types, search-types etc.)\n
reqeust_body(which involves query detail about this request)\n
sequence of dicts to serialize 方法和前面的几乎一样,只是不需要将其转换为字符串:
def msearch():
es = get_es_instance()
request = []
req_head = {'index': 'my_test_index', 'type': 'doc_type_1'}
req_body = {
'query': {'term': {'text' : 'bag'}},
'from' : 0, 'size': 2 }
request.extend([req_head, req_body])
req_head = {'index': 'my_test_index', 'type': 'doc_type_2'}
req_body = {
'query': {'range': {'price': {'gte': 100, 'lt': 300}}},
'from' : 0, 'size': 2 }
request.extend([req_head, req_body])
resp = es.msearch(body = request)
关于python - 如何为 Python Elasticsearch mSearch 创建请求主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28546253/
我的目标是使用multiple search在一个ES请求中发送3个独立的查询 我正在使用NEST客户端使用以下功能将查询发送到Elastic search IElasticClient _elast
我正在尝试运行 a multi search request在 Elasticsearch Python 客户端上。我可以正确运行单一搜索,但无法弄清楚如何格式化 msearch 请求。根据文档,请求
Elasticsearch 版本 - .90.1 以下工作完美。 cat names {"index":"events","type":"news"} {"query":{"term":{"Type"
我是一名优秀的程序员,十分优秀!