Elasticsearch不会对海量数据做出回应

希望

我正在centos5上工作,并且使用-Xms808m -Xmx808m -Xss256k参数运行版本1.0.0的elasticsearch有17个索引,共有30200583个文档。每个索引的文档数在1000000到2000000之间。

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "date": {
              "to": "2014-06-01 14:14:00",
              "from": "2014-04-01 00:00:00"
            }
          }
        }
      ],
      "should": [],
      "must_not": [],
      "minimum_number_should_match": 1
    }
  },
  "from": 0,
  "size": "50"
}

它给予回应;

{
   took: 5903
   timed_out: false
   _shards: {
      total: 17
      successful: 17
      failed: 0
   },
   hits: {
   total: 30200583
...
...
...}

但是,当我在elasticsearch-head工具上发送查询后50行时;

{
  ...
  ...
  ...
  "from": 30200533,
  "size": "50"
}

它不会给出响应并抛出异常,例如;

ava.lang.OutOfMemoryError: Java heap space
        at org.apache.lucene.store.DataOutput.copyBytes(DataOutput.java:247)
        at org.apache.lucene.store.Directory.copy(Directory.java:186)
        at org.elasticsearch.index.store.Store$StoreDirectory.copy(Store.java:348)
        at org.apache.lucene.store.TrackingDirectoryWrapper.copy(TrackingDirectoryWrapper.java:50)
        at org.apache.lucene.index.IndexWriter.createCompoundFile(IndexWriter.java:4596)
        at org.apache.lucene.index.DocumentsWriterPerThread.sealFlushedSegment(DocumentsWriterPerThread.java:535)
        at org.apache.lucene.index.DocumentsWriterPerThread.flush(DocumentsWriterPerThread.java:502)
        at org.apache.lucene.index.DocumentsWriter.doFlush(DocumentsWriter.java:506)
        at org.apache.lucene.index.DocumentsWriter.flushAllThreads(DocumentsWriter.java:616)
        at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:370)
        at org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:285)
        at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:260)
        at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:250)
        at org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:170)
        at org.apache.lucene.search.XSearcherManager.refreshIfNeeded(XSearcherManager.java:123)
        at org.apache.lucene.search.XSearcherManager.refreshIfNeeded(XSearcherManager.java:59)
        at org.apache.lucene.search.XReferenceManager.doMaybeRefresh(XReferenceManager.java:180)
        at org.apache.lucene.search.XReferenceManager.maybeRefresh(XReferenceManager.java:229)
        at org.elasticsearch.index.engine.internal.InternalEngine.refresh(InternalEngine.java:730)
        at org.elasticsearch.index.shard.service.InternalIndexShard.refresh(InternalIndexShard.java:477)
        at org.elasticsearch.index.shard.service.InternalIndexShard$EngineRefresher$1.run(InternalIndexShard.java:924)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

问题是什么?是不是Java堆空间不足,还是我的查询导致此堆空间错误?

扎克

这两个问题的答案都是“是”。您没有足够的堆空间,这就是您看到此错误的原因,并且由于您没有足够的堆空间,所以查询导致了该错误。

原因是因为分类,深分页非常昂贵。要检索第20个元素,您需要将1-20个元素保留在内存中并进行排序。要检索第1,000,000个元素,您需要将元素1-999,999保留在内存中并进行排序。

这通常需要大量的内存。

有几种选择:

  • 获得更多的内存。问题解决了
  • 使用扫描/滚动而不是常规搜索。扫描/滚动不执行评分,因此不需要维护排序顺序,这使内存效率很高
  • 使用其他排序标准(例如,反向排序)或较小的窗口(例如,较小的日期范围,以便您可以分页到末尾)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Vuex不会对复杂对象做出反应

来自分类Dev

事件不会对额外的鼠标按钮做出反应

来自分类Dev

Nginx不会对通配符子域(* .domain)做出反应

来自分类Dev

在代码中创建的按钮不会对其事件做出反应

来自分类Dev

模板不会对变量 React 的变化做出反应

来自分类Dev

稍后,JQM预置的翻转开关不会对事件做出反应

来自分类Dev

liferay-ui:搜索容器列按钮不会对点击做出反应

来自分类Dev

媒体播放器应用失去焦点时不会对媒体键做出反应

来自分类Dev

稍后JQM预置的翻转开关不会对事件做出反应

来自分类Dev

监听鼠标的程序不会对程序化的鼠标移动做出反应

来自分类Dev

FileZilla 不会对来自我的 java FTP 服务器的命令做出反应

来自分类Dev

标题正在消失并且不会对 CSS 更改做出反应

来自分类Dev

当 input_passthrough 为 true 时,awesome-wm wibox 不会对鼠标信号做出反应

来自分类Dev

如何避免Spyne做出回应?

来自分类Dev

处理海量数据

来自分类Dev

在图片上浮动文字并做出回应?

来自分类Dev

CSS:列出图像和文字。做出回应

来自分类Dev

如何做出回应性的Facebook评论

来自分类Dev

使用useeffect卸载时做出反应,数据不会改变

来自分类Dev

取得Elasticsearch回应

来自分类Dev

与海量数据流异步

来自分类Dev

InfluxDB因海量数据而崩溃

来自分类Dev

比较海量数据的最佳算法

来自分类Dev

PL / SQL Developer不会对只读链接数据库运行读取查询

来自分类Dev

使用Array.prototype.filter()不会对数组重复数据删除

来自分类Dev

Ajax来源的dataTable不会对数据进行排序,搜索或分页。

来自分类Dev

PL / SQL Developer将不会对只读链接数据库运行读取查询

来自分类Dev

SSRS不会打印数据集的所有记录,但会对其计数

来自分类Dev

百胜挂了,不会回应

Related 相关文章

  1. 1

    Vuex不会对复杂对象做出反应

  2. 2

    事件不会对额外的鼠标按钮做出反应

  3. 3

    Nginx不会对通配符子域(* .domain)做出反应

  4. 4

    在代码中创建的按钮不会对其事件做出反应

  5. 5

    模板不会对变量 React 的变化做出反应

  6. 6

    稍后,JQM预置的翻转开关不会对事件做出反应

  7. 7

    liferay-ui:搜索容器列按钮不会对点击做出反应

  8. 8

    媒体播放器应用失去焦点时不会对媒体键做出反应

  9. 9

    稍后JQM预置的翻转开关不会对事件做出反应

  10. 10

    监听鼠标的程序不会对程序化的鼠标移动做出反应

  11. 11

    FileZilla 不会对来自我的 java FTP 服务器的命令做出反应

  12. 12

    标题正在消失并且不会对 CSS 更改做出反应

  13. 13

    当 input_passthrough 为 true 时,awesome-wm wibox 不会对鼠标信号做出反应

  14. 14

    如何避免Spyne做出回应?

  15. 15

    处理海量数据

  16. 16

    在图片上浮动文字并做出回应?

  17. 17

    CSS:列出图像和文字。做出回应

  18. 18

    如何做出回应性的Facebook评论

  19. 19

    使用useeffect卸载时做出反应,数据不会改变

  20. 20

    取得Elasticsearch回应

  21. 21

    与海量数据流异步

  22. 22

    InfluxDB因海量数据而崩溃

  23. 23

    比较海量数据的最佳算法

  24. 24

    PL / SQL Developer不会对只读链接数据库运行读取查询

  25. 25

    使用Array.prototype.filter()不会对数组重复数据删除

  26. 26

    Ajax来源的dataTable不会对数据进行排序,搜索或分页。

  27. 27

    PL / SQL Developer将不会对只读链接数据库运行读取查询

  28. 28

    SSRS不会打印数据集的所有记录,但会对其计数

  29. 29

    百胜挂了,不会回应

热门标签

归档