2017-06-26 212 views
0

我已经在elasticsearch DB上传了大约1TB的数据。 搜索我尝试以下方法 -在弹性搜索中使用“search_after”搜索1M数据

  1. “从+规模”有index.max_result_window为10000的默认值,但我想100000搜索,所以我设置index.max_result_window为100000然后搜索从100000和大小= 10,但它会导致堆大小已满。

  2. 滚动API - 为了保持旧的段活着利用更多的文件句柄。因此它再次消耗节点中配置的内存。

  3. search_after - 我试着_uid的基础上整理文件,但它给了我follwoing错误 -

-

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "circuit_breaking_exception", 
     "reason": "[fielddata] Data too large, data for [_uid] would be [13960098635/13gb], which is larger than the limit of [12027297792/11.2gb]", 
     "bytes_wanted": 13960098635, 
     "bytes_limit": 12027297792 
    } 
    } 
}, 

可以做些什么来解决这个错误,也这是通过分页搜索大量数据的最有效方法?

+0

你可以发布搜索请求正文吗? –

+0

我相信通过的“_id”很大,根据文档,“id”没有索引,但“_uid”是,所以如果索引它应该是一个不是太大的大小。 –

回答

0

由于字段数据大小,您正在打断路器。它大于堆中分配的部分。

见Elasticsearch文档在这里:https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html#circuit-breaker

根据您可以考虑增加堆大小您的搜索要求,你可以改变断路器的限制,因此不会在你的情况下开火。可能最好的解决方法是限制fielddata缓存大小。

您可以通过添加此设置将config/elasticsearch.yml文件放在一个上限的fielddata(相对或绝对):

indices.fielddata.cache.size: 20% 

有关详细信息,请参阅:https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html#fielddata-size

而且这个现有的答案:FIELDDATA Data is too large