Есть ли способ динамически обновить индекс данных без перезапуска EmbeddedSolrServer в solrj?

1

мой простой код

Я запускаю этот код в java WebServlet

                solrDir = config.getServletContext().getRealPath("/lotiya");
                container = new CoreContainer(solrDir);
                container.load();
                server = new EmbeddedSolrServer(container, "collection1");
                solrParams = new ModifiableSolrParams();

                solrParams = new ModifiableSolrParams();
                solrParams.add(CommonParams.Q, "*:*");

            //solrParams.set("qt", "/dataimport");
            //solrParams.set("command", "full-import");
            //solrParams.set("command", "reload-config");

            solrParams.set("wt", "json");

            QueryResponse queryResponse = server.query(solrParams);

            for (SolrDocument document : queryResponse.getResults()) {
              System.out.println(document);
            }

в первый раз, когда dataimport работает хорошо. Исключение происходит, когда выполняется второй раз из-за "write.lock" в индексах, которые я знаю, одно решение - это перезапуск сервера и проверка, но каждый раз, когда этот метод невозможен. так, есть ли какой-либо метод для переопределения.

Код исключения, например...

org.apache.solr.common.SolrException: SolrCore 'collection1' is not available due to init failure: Index locked for write for core collection1
    at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:827)
    at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:110)
    at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:90)
    at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:301)
    at solrjj.TestSolr.doGet(TestSolr.java:71)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.solr.common.SolrException: Index locked for write for core collection1
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:844)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:630)
    at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:562)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:597)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:258)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:250)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    ... 3 more
Caused by: org.apache.lucene.store.LockObtainFailedException: Index locked for write for core collection1
    at org.apache.solr.core.SolrCore.initIndex(SolrCore.java:496)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:761)
    ... 11 more
  • 0
    Почему бы вам не запустить Solr как независимый сервер, а затем запросить Solr через HTTP-соединение?
Теги:
solrj

1 ответ

1
Лучший ответ

Я думаю, вы используете Servlet. Попробуйте следующий код с помощью метода init() сервлета.

    container = new CoreContainer(solrDir);
    container.load();
    server = new EmbeddedSolrServer(container, "collection1");
    solrParams = new ModifiableSolrParams();

Причина: когда сервлет загружается инициализирован, каждый раз, когда он создает объект-контейнер и объект-сервер, который уже использует collection1, поэтому возникает ошибка write.lock

  • 0
    да .. хорошо я это проверил

Ещё вопросы

Сообщество Overcoder
Наверх
Меню