【问题标题】:How to use all the cores of Solr in solrj如何在 solrj 中使用 Solr 的所有内核
【发布时间】:2015-06-16 12:32:23
【问题描述】:

我已经下载了 solr 5.2.0 并开始使用$solr_home/bin/solrstart

日志说:

等待看到 Solr 在端口 8983 上监听 [/]
在端口 8983 (pid=17330) 上启动 Solr 服务器。祝您搜索愉快!

然后我访问了http://localhost:8983/solr并使用Core Admin / new Core as Core1创建了一个新核心(使用solr-5.2.0/server/solr/configsets/data_driven_schema_configs/config作为新核心)

然后我编写了一个索引几条记录的java代码

代码如下:

public static void main(String[] args) throws IOException, SolrServerException {

    HttpSolrClient solrClient =  new HttpSolrClient("http://localhost:8983/solr/core1"); //$NON-NLS-1$4
    //HttpSolrClient solrClient =  new HttpSolrClient(args[0]); //$NON-NLS-1$4

    // Empty the database...
    solrClient.deleteByQuery( "*:*" );// delete everything! //$NON-NLS-1$
    System.out.println("cleared"); //$NON-NLS-1$
    ArrayList<SolrInputDocument> docs = new ArrayList<>();

    long starttime = System.currentTimeMillis();
    for (int i = 0; i < 1000000; ++i) { 
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("bat", "book"+i); //$NON-NLS-1$ //$NON-NLS-2$
        doc.addField("id", "book id -" + i); //$NON-NLS-1$ //$NON-NLS-2$
        doc.addField("name", "The Legend of the Hobbit part 1 " + i); //$NON-NLS-1$ //$NON-NLS-2$
        doc.addField("id1", "book id -" + i); //$NON-NLS-1$ //$NON-NLS-2$
        doc.addField("name1", "The Legend of the Hobbit part 2 " + i); //$NON-NLS-1$ //$NON-NLS-2$
        doc.addField("id2", "book id -" + i); //$NON-NLS-1$ //$NON-NLS-2$

        docs.add(doc);

        if (i % 250000 == 0) {
            solrClient.add(docs);
            System.out.println("added "+ i + "documents"); //$NON-NLS-1$ //$NON-NLS-2$
            docs.clear();
        }
    }
    solrClient.add(docs);
    System.out.println("completed adding to Solr. Now commiting.. Please wait"); //$NON-NLS-1$
    solrClient.commit();
    long endtime = System.currentTimeMillis();
    System.out.println("process completed in "+(endtime-starttime)/1000+" seconds"); //$NON-NLS-1$ //$NON-NLS-2$
}

运行代码后,我检查 http://localhost:8983/solr/#/~cores/core1 并看到 1000000 个文档被索引。

然后我添加了另一个核心(以与核心 1 类似的方式命名为 core2),然后再次运行该作业,这一次,我看到核心 2 没有显示任何文档,只有核心 1 仍然显示。

任何人都可以建议如何使用 solr 的两个核心来分发和存储文档,以便我可以更快地索引数据,我的假设是如果我增加核心数量,索引速度应该会提高。

如果有人尝试并成功利用这两个内核并看到性能改进,请告诉我。

谢谢。

【问题讨论】:

  • 在解决了 URL 的问题之后 - 您最好并行运行索引,而不是使用单独的核心(这意味着您的数据将被分成不同的容器和跨核心查询不是一个好主意)。

标签: java indexing solr lucene solrj


【解决方案1】:

在您的代码中,它仍然指向 core1。

HttpSolrClient solrClient =  new HttpSolrClient("http://localhost:8983/solr/core1"

如果你想拥有 core2 的 indexex

这里需要改一下

HttpSolrClient solrClient =  new HttpSolrClient("http://localhost:8983/solr/core2"

在此更改后尝试运行作业,它将为 core2 编制索引。

【讨论】:

  • 您好 Abhijit,感谢您指出我的错误。我想要实现的是使用两个内核进行索引,或者换句话说,是否可以使用两个内核进行索引并且复制因子为 1。我的唯一目标是提高索引的性能,因为我正在尝试接近真实时间索引。 lucene 中同样的事情需要 1/3 的时间来执行。你能提出任何改变吗..?
  • 核心用于正确维护您的索引。在高层次上,对于结构。我认为您无法通过更多内核获得更快的索引。你在lucene中的1/3倍是什么意思。 Solr 内部使用 lucene。您比较了哪些东西以 1/3 的时间到达。
  • 嗨 Ramzy,请参阅我的帖子stackoverflow.com/questions/30823314/… 在这里我写了两个代码做同样的事情(一个使用 lucene,另一个使用 solr)以及性能之间的差异,虽然我是能够通过更改 solrconfig.xml 将今天的 Solr 速度从 159 秒提高到 80 秒,但 Lucene 仍然更快。希望它能让您对我的问题陈述有更多了解。 :)
猜你喜欢
  • 2011-10-03
  • 2012-07-19
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
相关资源
最近更新 更多