java - Solr 多核搜索

标签 java apache search solr

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

为了支持对这些索引的搜索,我计划使用 Solr MultiCore Feature 。通过我一直在阅读的有关此的各种文章,看起来这会起作用。

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

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

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

最佳答案

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

例如,

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

基于配置solr.xml:

<solr persistent="true" sharedLib="lib">
 <cores adminPath="/admin/cores">
  <core name="usercore1" instanceDir="usercore1" />
  <core name="usercore2" instanceDir="usercore1" />
 </cores>
</solr>

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

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

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

Solr 还可以动态地重新加载其配置,如果您有一个编辑了 cores 配置的脚本,这些更改也应该被拾取。

关于java - Solr 多核搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221132/

相关文章:

php - 链接到 Docker memcached 容器

pdf - 如何在MSSQL Server 2017中使用Adobe iFilter 11

java - 如何使用 jax-ws commons 配置 jax-ws 以与 Spring 一起使用?

java - GridView -NullPointerException 错误 - 尝试访问 "child imageview"

java - 使用 JFileChooser 选择 txt 文件并使其出现在 JTextField 上是行不通的

PHP/MySQL 搜索

android-studio - 在 Android Studio 中搜索整个项目中出现的所有字符串

java - OOP:在这种情况下扩展/实现如何帮助我

java - Java 中的 Apache FTP 服务器 : force CR LF to LF conversion for ASCII transfers

MacOS Catalina localhost 中的 WordPress 文件夹权限