SearchScroll Java API SearchContextMissingException

时间:2017-05-26 17:57:46

标签: java elasticsearch elasticsearch-5

因此无论出于何种原因,我正在尝试运行一个简单的Java应用程序来从另一个索引(" myindex")创建一个全新的索引来修复一些数据,但它似乎崩溃并说"找不到搜索上下文id = 5322"它说每个节点的不同ID(每个节点?)。

我有3个节点。运行elasticsearch的3台服务器。

我在这里跟着例子:

https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.4/java-search-scrolling.html

确保我有65K的限制:

https://www.elastic.co/guide/en/elasticsearch/reference/5.4/file-descriptors.html

main(String[] args){
final TimeValue keepAlive = TimeValue.timeValueSeconds(90L);

SearchResponse scrollResp = client.prepareSearch("myindex").setScroll(keepAlive)
                    .setSize(100).get();

    do
    {
        for(SearchHit hit : scrollResp.getHits().getHits())
        {
        i++;
        // do something here to prepare data for later rewriting to new index
        }
      scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
                        .setScroll(keepAlive)
                        .execute().actionGet();
    } while(scrollResp.getHits().getHits().length != 0);
    System.out.println("Storing entries...");
    /// store some of this info
 }

我解释了这个错误:

  

SearchContextMissingException,由以下引起:org.elasticsearch.search.SearchContextMissingException:找不到id的搜索上下文[5031530]          at org.elasticsearch.search.SearchService.findContext(SearchService.java:480)          在org.elasticsearch.search.SearchService.executeFetchPhase(SearchService.java:450)

     

在node-2 ...内部异常中找不到id = 45233:无法找到id = 52363 node-3

1 个答案:

答案 0 :(得分:0)

所以我没有发现问题,但由于可能的原因,问题得到解决:

  1. memlock在ALL 3 NODE SERVERS上的elasticsearch.yml中设置为true
  2. nofile lock在所有3个节点服务器上的elasticsearch.yml中设置为true
  3. 暂时在所有3个节点服务器上完全复制。