4

在网上搜索 SOLR 中的集合时,我只发现了有关分布式搜索等的信息,但是当我了解正确集合的概念时,它们使用相同的模式在同一服务器实例上运行,但在逻辑上是完全分离的。这个对吗?所以我可以有 3 个集合,搜索一个集合不会输出另一个集合的结果,对吗?是否可以一次搜索多个集合?

但我的首要任务是:如何创建第二个系列?即使是一个好的文档的链接也将不胜感激。在我的 solr.xml 我有

  <cores adminPath="/admin/cores" defaultCoreName="web-collection" host="${host:}" hostPort="${jetty.port:}">
    <core name="web-collection" instanceDir="." />
  </cores>

创建第二个核心条目并设置不同的路径就足够了吗?喜欢...

  <cores adminPath="/admin/cores" defaultCoreName="web-collection" host="${host:}" hostPort="${jetty.port:}">
    <core name="web-collection" instanceDir="web" />
    <core name="test-collection" instanceDir="test" />
  </cores>

instanceDir 是关于什么的?它是相对于 SOLR-Home 的索引目录吗?

4

4 回答 4

7

您可以使用多个核心。每个核心都是一个单独的 lucene 索引。
instanceDir是该特定核心的配置文件的位置,包含conf目录的文件夹,其中包含schema.xml等等solrconfig.xml。通常每个核心都有一个子文件夹solr.xml(SOLR_HOME),并使用相对路径在其内部引用它们solr.xml

于 2012-10-25T14:11:58.517 回答
2

有关设置核心及其工作方式的更多信息,请参阅Solr Wiki - CoreAdmin了解更多详细信息和一些示例。

您添加第二个核心条目的示例就足够了。

实例目录是相对于您的 SOLR 主值的索引目录。

于 2012-10-25T16:49:22.787 回答
2

除了 REST API,您还可以使用 SolrJ 创建新内核。在自己努力创建一个之后,这就是我最终做的事情:

SolrServer aServer =  new HttpSolrServer("http://127.0.0.1:8983/solr");
CoreAdminResponse aResponse = CoreAdminRequest.getStatus(collectionName, aServer);

if (aResponse.getCoreStatus(aNewInstance.getCollection()).size() < 1)
{
    CoreAdminRequest.Create aCreateRequest = new CoreAdminRequest.Create();
    aCreateRequest.setCoreName(collectionName);
    aCreateRequest.setInstanceDir(collectionName);
    aCreateRequest.process(aServer);
}
于 2013-07-23T20:29:08.007 回答
0

用 Solr 6.x 测试

幸运的是,现在有一个标准create的脚本选项bin/solr能够检测 Solr 在哪种模式下运行(独立或 SolrCloud),然后采取适当的操作(创建核心或创建集合)。

$ bin/solr create -help

Usage: solr create [-c name] [-d confdir] [-n configName] [-shards #] [-replicationFactor #] [-p port]

例如,假设您在 port 上运行最新版本的 Solr 8983,请创建一个正在运行的新内核:

bin/solr create -c collection1 -d /path/to/solr/conf

对于有时在集合和核心之间发生的混淆,必须做一个重要的区分。从客户端的角度来看没有区别,所以创建一个核心或集合取决于 Solr 是在独立(核心)还是 SolrCloud 模式(集合)下运行。

如需更完整的区别,请参阅Solr Collection vs Cores

于 2017-04-18T16:34:57.037 回答