当客户端的处理过多时,ElasticSearch 中的 map-reduce 等价物是什么?是否有类似“流式传输”的东西,以便客户端可以在数据进入时将数据减少到输出?
假设我需要在客户端进行连接或复杂过滤,如果没有一些 map-reduce 方案,这种类型可能不适合内存。我不介意等待很长时间才能得到响应,但我不想破坏机器(客户端和/或服务器)。
我该怎么办?
示例,映射:
{"book":{"properties":{
"title":{"type":"string", "index":"analyzed"},
"author":{"type":"string", "index":"analyzed"},
}
{"character":{"properties":{
"book_id":{"type":"string", "index":"not_analyzed"},
"name":{"type":"string", "index":"analyzed"},
"age":{"type":"integer"},
"catch-phrase":{"type":"string", "index":"analyzed"},
}
假设我想找到所有至少有 M 个字符且流行语不超过 N 的书籍(其中 N 是客户端提供的参数)
所以它会是get_books_with_short_phrases(M,N)
我当然可以将诸如“短语长度”之类的字段添加到“字符”类型,但让我们假设“catch-phrase”的处理可能一直在变化。
我想将“字符”和“书籍”流式传输到客户端,检查每个客户端并输出一个键值,<book>-<character,len(phrase)>
然后将其进一步减少到<book>-<num_of_chars_with_short_phrase>
如果我将所有文档都加载到客户端内存中,那可能是一场灾难。如果客户处理每本书并将其减少到 ak,v 可能会更好。
我错了吗?
解决方案是否以某种方式在服务器上运行脚本,因此它执行 map-reduce?