簡體   English   中英

索引時的Elastic Search Java(Spring)問題

[英]Elastic Search java (spring) issue at indexing

我已經將spring-spring應用程序集成了Elastic-search 1.7.1。我有一個cron作業,該作業在每次運行時都會更新elasticsearch的索引。 我遵循了github上可用的各種示例代碼來使其工作。首先,我為索引目的自動裝配了ElasticSearchOperations:

@Autowired
private ElasticsearchOperations elasticsearchOperations;

然后以以下方式執行內部循環索引

for(int i=0;i<list.size();i++)
{
    CategoryProductSearch search = new CategoryProductSearch();
    // set data to fields
    System.out.println("BEFORE SAVING DATA");
    IndexQuery indexQuery =new      

    IndexQueryBuilder().withId(search.getId()).withObject(search).build();
    //indexQuery.setId(search.getId());
    //indexQuery.setObject(search);
    //elasticsearchOperations.createIndex(CategoryProductSearch.class);
    elasticsearchOperations.putMapping(CategoryProductSearch.class);
    elasticsearchOperations.index(indexQuery);
    elasticsearchOperations.refresh(CategoryProductSearch.class,true);

    System.out.println("SAVING DATA");
 }

當我第一次運行它時,它按預期工作。 我在配置文件夾中的elasticsearch.yml中將集群重命名為“ mycluster”。 第一次運行后,我可以看到創建的文件夾。 索引和搜索(在另一個文件中實現)工作完美。 但是有時代碼卡在下面提到的行中,並顯示連續警告[Chase Stein]節點null而不是集群Cluster [elasticsearch]的一部分,從而忽略了...

 elasticsearchOperations.putMapping(CategoryProductSearch.class);

然后一段時間后,它將引發NoNodeAvailableException。 我已經讀過這個問題,它說可能沒有足夠的磁盤空間用於彈性搜索來索引數據。 我剛接觸春天,並第一次嘗試了彈性搜索。 這是磁盤空間問題還是我索引數據的方式出現問題? 另外,如果我從/ data目錄中手動刪除“ mycluster”文件夾並重新啟動應用程序,它將再次正常工作。

我已經在本地PC上進行了所有設置。 每當我重新啟動elasticsearch服務時,都會出現此問題。

異常的堆棧跟蹤為:

  org.elasticsearch.action.UnavailableShardsException: [mycluster][0]       

  Primary shard is not active or isn't assigned to a known node. Timeout:    

  [1m], request: index {[mycluster][categoryproductsearch][1], 

  source[{// Source string }]
at 
  org.elasticsearch.action.support.replication
  .TransportShardReplicationOperationAction$PrimaryPhase
  .retryBecauseUnavailable
  (TransportShardReplicationOperationAction.java:655)
at 
   org.elasticsearch.action.support.replication
  .TransportShardReplicationOperationAction$PrimaryPhase.doRun
  (TransportShardReplicationOperationAction.java:362)
at 

  org.elasticsearch.common.util.concurrent.AbstractRunnable.run
  (AbstractRunnable.java:36)
at 
   org.elasticsearch.action.support.replication.
   TransportShardReplicationOperationAction$PrimaryPhase$3.onTimeout
   (TransportShardReplicationOperationAction.java:515)
at  

 org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener
 .onTimeout
 (ClusterStateObserver.java:231)
at    
     org.elasticsearch.cluster.service.
    InternalClusterService$NotifyTimeout.run
    (InternalClusterService.java:560)
at 
     java.util.concurrent.ThreadPoolExecutor.runWorker
     (ThreadPoolExecutor.java:1145)
at 
     java.util.concurrent.ThreadPoolExecutor$Worker.run
     (ThreadPoolExecutor.java:615)
at 
      java.lang.Thread.run(Thread.java:745)

嗨,我從generator-jhipster-elasticsearch-reindexer那里獲得了這段代碼

@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
private <T> void reindexForClass(Class<T> entityClass, JpaRepository<T, Long> jpaRepository,
                                                      ElasticsearchRepository<T, Long> elasticsearchRepository) {
    elasticsearchTemplate.deleteIndex(entityClass);
    try {
        elasticsearchTemplate.createIndex(entityClass);
    } catch (IndexAlreadyExistsException e) {
        // Do nothing. Index was already concurrently recreated by some other service.
    }
    elasticsearchTemplate.putMapping(entityClass);
    if (jpaRepository.count() > 0) {
        try {
            Method m = jpaRepository.getClass().getMethod("findAllWithEagerRelationships");
            elasticsearchRepository.save((List<T>) m.invoke(jpaRepository));
        } catch (Exception e) {
            elasticsearchRepository.save(jpaRepository.findAll());
        }
    }
    log.info("Elasticsearch: Indexed all rows for " + entityClass.getSimpleName());
}

如您所見,首先刪除索引,然后再創建一個映射,我認為您的訂單是錯誤的,並且導致碎片破裂。 您可以在localhost:9200上訪問Elastic Rest API,並嘗試獲取請求/ _cat / indices來查看索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM