我正在使用Apache Solr进行搜索。我使用它来提供基于用户的个人搜索。即每个用户都有一个单独的物理Lucene索引。因此,对于10个用户,我在磁盘上有10个单独的物理索引。
为了支持对这些索引的搜索,我计划使用Solr MultiCore Feature。我一直在阅读有关此的各种文章,看来这是可行的。
我实际上不确定的是,当Solr搜索器获得查询时,而不是将查询发送到所有多核中,我如何将查询集中到与特定用户索引相连的那个核中?这是配置更改还是我需要做代码级更改?
即我想只将查询发送到一个solr-core(基于userid)。这有可能吗?
更新:因此,根据其中一个解决方案,我可以在solrconfig.xml中添加多核,即在启动solr时,我需要提及这些核(或者在我的情况下是用户)。因此,现在,如果要添加新的用户索引,则可能需要停止solr,编辑其配置,添加用户核心并再次启动solr。有什么方法可以动态地将核心添加到正在运行的Solr实例吗?
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>
...而不是将查询发送到所有多核...
这种方法称为分片,并且基于分布式搜索,这是一个完全独立的功能,专注于在多个 solr实例上拆分一个用户索引。
[ edit ]创建新内核的一种方法是solrj,它提供了一个例程CoreAdmin.createCore(..)
。您也可以使用手动HTTP请求执行此操作:/cores?action=CREATE&name=usercore3
...
Solr还可以动态地重新加载其配置,如果您有一个可以编辑内核配置的脚本,那么这些更改也应该被选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句