Solr MultiCore搜索

Sri*_*aju 4 java apache search solr

我正在使用Apache Solr进行搜索.我用它来提供基于用户的个人搜索.即每个用户都有一个单独的物理Lucene索引.因此,对于10个用户,我在磁盘上有10个单独的物理索引.

为了支持对这些索引的搜索,我计划使用Solr MultiCore功能.我已经阅读过有关此内容的各种文章,看起来这样可行.

我实际上不确定的是,当一个solr搜索者得到一个查询,而不是将查询发送到所有多核时,如何将查询汇集到具有该特定用户索引所连接的核心?这是配置更改还是我需要进行代码级别更改?

即我想将查询只发送到一个solr-core(基于userid).这甚至可能吗?

更新:所以根据其中一个解决方案,我可以在solrconfig.xml中添加多核,即在启动solr时我需要提到核心(或者在我的情况下是用户).所以现在,如果我想添加新用户的索引,我可能需要停止solr,编辑其配置,添加用户核心并再次启动solr.有没有办法动态地将核心添加到正在运行的solr实例?

Joh*_*erg 10

Solr核心本质上是在应用程序服务器上的相同上下文中运行的多个索引.您可以将其视为为每个用户安装1个war文件.每个核心都由一个名称分隔,因此您必须自己跟踪哪个URL对哪个用户有效.

例如,

http://host.com/solr/usercore1/select?q=test http://host.com/solr/usercore2/select?q=test

哪个基于config solr.xml:

<solr persistent="true" sharedLib="lib">
 <cores adminPath="/admin/cores">
  <core name="usercore1" instanceDir="usercore1" />
  <core name="usercore2" instanceDir="usercore1" />
 </cores>
</solr>
Run Code Online (Sandbox Code Playgroud)

...而不是将查询发送到所有多核......

这种方法称为分片,基于分布式搜索,这是一个完全独立的功能,侧重于在多个 solr实例上拆分一个用户索引.

[编辑] 创建新核心的一种方法是使用solrj来提供例程CoreAdmin.createCore(..).您也可以使用手动HTTP请求执行此操作:/cores?action=CREATE&name=usercore3...

Solr也可以动态地重新加载它的配置,如果你有一个编辑核心配置的脚本,那么这些更改也应该被选中.


小智 7

您可以通过以下URL将多核与分片相结合:

http://localhost:8983/solr/core0/select?shards=localhost:8983/solr/core0,localhost:8983/solr/core1&q=*:*
Run Code Online (Sandbox Code Playgroud)