0

我在 Glassfish 上配置了 solr 服务器,一切正常。问题是当我尝试在我的 Java 应用程序中使用 Solrj 进行重新索引调用时。

我正在通过完全导入使用增量导入,但它在 Solrj 之外运行良好,所以我想没有问题

http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport

当我打电话

http://localhost:8787/solr-4.2.1/db/dataimport?command=full-import&clean=true

然后重新索引是正确的,我看到了我的新结果。当我使用 Solrj 进行操作时,问题就开始了

    SolrServer solr = new HttpSolrServer("http://localhost:8787/solr-4.2.1/db");

    ModifiableSolrParams params = new ModifiableSolrParams();

    params.set("qt", "/dataimport");
    params.set("command", "full-import&clean=true");

    QueryResponse response = null;

    try {
        response = solr.query(params);
    } catch (SolrServerException e1) {
        e1.printStackTrace();
    } 
    System.out.println(response);

响应似乎还可以

{responseHeader={status=0,QTime=0},initArgs={defaults={config=db-data-config.xml}},command=full-import&clean=true,status=idle,importResponse=,statusMessages={Total Requests made to DataSource=4, Total Rows Fetched=5, Total Documents Skipped=0, Full Dump Started=2013-07-09 09:42:34, =Indexing completed. Added/Updated: 5 documents. Deleted 0 documents., Committed=2013-07-09 09:42:35, Total Documents Processed=5, Time taken=0:0:0.390},WARNING=This response format is experimental.  It is likely to change in the future.}

那里的所有信息都是正确的 - 它应该向数据库发出 4 个请求并继续对所有 5 行进行索引。但是当我查看我的索引数据时(使用 URL 或 Solrj)

http://localhost:8787/solr-4.2.1/db/search/?q=*:*

我看到还有旧索引。例如,我在数据库中更改了一行,使用 Solrj 调用 reindex,但我发现索引没有任何变化。当我调用 URL 命令时

http://localhost:8787/solr-4.2.1/db/dataimport?command=full-import&clean=true

重新索引运行正常,我看到 Solr 中的值发生了变化(使用 URL 或 Solrj)。我试图将 solr.commit() 添加到我的代码中,但没有帮助。我究竟做错了什么?为什么我使用 Solrj 看不到任何变化,但使用 URL 一切正常?

4

1 回答 1

2

您可以检查的几件事 -

  • 仅命令完全导入params.set("command", "full-import");
  • 您可以添加clean=true为单独的参数
  • 此外,检查您是否需要commit=true作为参数传递以提交文件。
  • 此外,DIH 调用是异步的,您会很快得到响应,但是该进程可能仍在后端运行。
于 2013-07-09T10:56:28.433 回答