如何使用 Spring Data Solr 实现多核和存储库的自定义 Solr 存储库

2023-12-01

我想使用 spring-data-solr 在一项服务中访问多个/2 个存储库。 从Spring Data Solr 多核和存储库我知道“不幸的是,通过命名空间配置的多核支持是一个悬而未决的问题”。

您能帮我看一下以下示例吗?如何创建自定义存储库?

我的 applicationContext.xml 有两个 Solr 模板定义如下:

<!-- Enable Solr repositories and configure repository base package -->
<solr:repositories base-package="com.ay.api.repository"/>

<!-- Configures HTTP Solr server -->
<solr:solr-server id="solrServer" url="${solr.server.url}"/>

<!-- Configures Solr Events template -->
   <bean id="solrEventsTemplate" class="org.springframework.data.solr.core.SolrTemplate">
   <qualifier type="solrEventsTemplate"/>
   <constructor-arg index="0" ref="solrServer"/>
   <constructor-arg index="1" value="${solr.server.events.core.name}"/>
</bean>

<!-- Configures Solr Towns template -->
<bean id="solrTownsTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg index="0" ref="solrServer"/>
<constructor-arg index="1" value="${solr.server.towns.core.name}"/>
</bean>

我有以下回购协议

@Repository
public class EventDocumentRepositoryImpl implements EventSearchRepository { 


@Resource
@Qualifier("solrEventsTemplate")
private SolrTemplate solrEventsTemplate;

...
}

public interface EventDocumentRepository extends EventSearchRepository, SolrCrudRepository<EventDocument, String> {

}

public interface EventSearchRepository { .... }


@Repository
public class TownRepositoryImpl implements TownSearchRepository { ... 

@Resource
@Qualifier("solrTownsTemplate")
private SolrTemplate solrTownsTemplate;

...
}

public interface TownRepository extends SolrCrudRepository<TownDocument, String>{}
public interface TownSearchRepository { .... }

最后,服务如下所示:

 @Service
 public class SearchEventServiceImpl implements SearchEventService {

 @Resource
 private EventDocumentRepository eventRepository;

 @Resource
 private TownRepository townRepository;
 .....
 }

有人可以建议我如何修改我的代码以实现自定义存储库,如中提到的Spring Data Solr 与 Solr 4.1 多核?因为我无法理解该线程中建议的解决方案。

提前谢谢了。


存储库扫描将寻找solrTemplate并使用提供的模板创建存储库。由于每个 Solr 核心都需要一个模板,因此您必须手动创建模板和存储库。

首先创建您的存储库和自定义实现。

public interface EventRepositoryCustom {

    Page<Event> findEvent();

}

public interface EventRepository extends EventRepositoryCustom, SolrCrudRepository<Event, String> {

}

public class EventRepositoryImpl implements EventRepositoryCustom {

    private SolrTemplate eventTemplate;

    public EventRepositoryImpl(SolrTemplate eventTemplate) {
        this.eventTemplate = eventTemplate;
    }

    @Override
    public Page<Event> findEvent() {
        return eventTemplate.queryForPage(new SimpleQuery("*:*"), Event.class);
    }

}

为你做同样的事情TownRepository.

使用Java Config进行配置。使用 XML 也可以完成同样的事情。

@Configuration
public class SolrContext {

  private static final String PROPERTY_NAME_SOLR_SERVER_URL = "solr.host";

  @Resource
  private Environment environment;

  // Factory creates SolrServer instances for base url when requesting server
  // for specific core. 
  @Bean
  public SolrServerFactory solrServerFactory() {
    return new MulticoreSolrServerFactory(new HttpSolrServer(
            environment.getRequiredProperty(PROPERTY_NAME_SOLR_SERVER_URL)));
  }

  // SolrTemplate for /solrServerUrl/towns
  @Bean
  public SolrTemplate townTemplate() throws Exception {
    SolrTemplate solrTemplate = new SolrTemplate(solrServerFactory());
    solrTemplate.setSolrCore("towns");
    return solrTemplate;
  }

  // SolrTemplate for /solrServerUrl/events
  @Bean
  public SolrTemplate eventTemplate() throws Exception {
    SolrTemplate solrTemplate = new SolrTemplate(solrServerFactory());
    solrTemplate.setSolrCore("events");
    return solrTemplate;
  }

  @Bean
  public EventRepository eventRepository() throws Exception {
    return new SolrRepositoryFactory(eventTemplate())
      .getRepository(EventRepository.class, new EventRepositoryImpl(eventTemplate()));
  }

  @Bean
  public TownRepository townRepository() throws Exception {
    return new SolrRepositoryFactory(townTemplate())
      .getRepository(TownRepository.class, new TownRepositoryImpl(townTemplate()));
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Spring Data Solr 实现多核和存储库的自定义 Solr 存储库 的相关文章

  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • solr 不标记受保护的单词

    我在 Solr Lucene 3 x 中有一个文档 其中有一个特殊的复制字段facet headline 以便有一个用于分面的未词干字段 有时两个或以上的单词属于在一起 这应该被处理 算作一个单词 例如 kim jong il 因此标题 星
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 在Qt5中绘制大量独立角色的最佳方法?

    我正在编写一个显示大量文本的应用程序 但它不是单词和句子 而是以 CP437 字符集显示的二进制数据 目前的形式 但我在绘制这些角色时遇到了问题 我需要一一绘制每个角色 因为稍后我想应用不同的颜色 这些字符也应该有透明的背景 因为稍后我想在
  • Chart Js可点击栏

    我想让我的图表 js 栏可点击 我想添加点击功能 例如链接 不知道如何继续 已阅读文档 10 次
  • 铁路路线 /new(.:format)

    假设我有一个wordsController 我明白 GET words format words index 该路线在路线末尾有一个 format 以便我可以选择不同的响应格式 GET words new format words new
  • 寻找具有特定内部颜色的单元格

    我使用此代码来查找特定颜色的单元格 通过条件格式更改 然后根据该行中的值交换到另一张工作表 然而 宏运行并没有找到任何东西 没有错误消息 它只是没有找到任何单元格 在这个测试中我已切换到 RGB 255 0 0 我在这里做错了什么 Sub
  • 在 ColdFusion MX7 中将 JSON 字符串转换为数组

    我有一个 cookie 值 例如 index 1 name TimePeriod hidden false index 2 name Enquiries hidden false index 3 name Online hidden fal
  • 这段VB代码是如何自动添加的?

    几天后 每当我在 Notepad 中打开 JavaScript js 或 HTML html 文件时 都会在末尾自动添加类似的 VB 脚本 我强烈地感觉到这是某种病毒 有人可以指导我吗 My file ends here
  • Steam API 使用 Javascript 获取 SteamID

    遇到了似乎是同源策略的问题 这引起了相当大的头痛 切入主题 我本质上是在仅提供用户名时尝试获取用户的 steam64id 例如 我的用户名 Emperor Jordan 我会转到 http steamcommunity com id emp
  • 是否使用未初始化变量 UB 的地址? [复制]

    这个问题在这里已经有答案了 这个小码是UB吗 void Test int bar printf p bar IMO 这不是 UB 但我想要一些其他意见 它只是打印地址bar 即使bar从未被初始化过 TL DR不 您的代码不会通过使用任何东
  • Azure WebApp Cors 不添加 Cors 标头

    我有一个 Owin WebAPI2 NET 应用程序 托管在 Azure 中的 AppService 上 我想使用 Azure 添加 CORS 支持在本文中 这看起来很简单 您只需将 Origin 站点添加到列表中 如下所示 http sc
  • PrimaryExtractor 和 AuthoritiesExtractor 没有被调用

    我有一个简单的 OAuth2 应用程序 我首先创建一个扩展 WebSecurityConfigurerAdapter 的 SecurityConfig 并使用 EnableOAuth2Sso 进行注释 我还在控制器中创建了一个 API 来测
  • jmeter无效的UTF-8中间字节

    我正在使用 jMeter 通过 post 请求将 json 发送到我的测试服务器 以下请求总是失败 location latitude 37 390737 longitude 121 973864 category Caf Bakeries
  • XMLHTTP 经典 asp Post

    我正在使用经典 ASP Web 应用程序 这里的目标是进行耗时的数据处理 而不让客户端等待响应 这导致使用 xmlhttp 对象异步发布 以下是应发布到所需 URL 的代码段 当输入 url 时 我可以直接点击此页面 并且所有数据处理都正常
  • HTML5 是否要求客户端支持 JavaScript?

    HTML 5 需要 JavaScript 吗 或者它是一个选项 我可以使用 HTML5 CSS3 和 GWT 而不是 JavaScript Thanks 不 HTML5 没有requireJavaScript 尽管它确实定义了
  • 在 SwiftUI 中使用 animatableData 进行动画处理时出现问题

    SwiftUI 不仅为我们提供了自动动画 它还让我们可以使用animatableData财产 非常酷 只是我无法让它发挥作用 以下代码在屏幕上显示钟面 数字 0 11 并显示切换开关 切换开关可将数字旋转 180 度 并以动画形式呈现 或者
  • Rake 任务似乎忽略了database.yml 配置

    我正在使用 MAC OS X 以及通过 Homebrew 安装的 postgresql 我正在使用 Rails 4 2 1 和 ruby 2 2 0 进行开发 与 postgresql 服务器的连接很好 但由于某种原因 每个应用程序都会访问
  • awk:根据另一列的值打印列

    我有一个包含六列的文件 我只想打印第六列中值 gt 3 的行的前两列 该语句打印第六列 gt 3 的所有行 awk 6 gt 3 file gt out 此语句打印前两列 awk print 1 2 file gt out 有人知道如何将这
  • 谷歌地图 - 如何设置缩放级别[重复]

    这个问题在这里已经有答案了 我已经尝试了 4 年多来弄清楚如何使用谷歌地图 我欣喜若狂 终于能够生成带有正确地址的地图 这是我的 JavaScript 我现在正在努力解决如何设置缩放级别 我在下面显示的每个地方都尝试过 但没有一个起作用 在
  • Windows 2012R2 中的 Powershell 脚本未运行

    我刚刚将 PowerShell 脚本从 2003 服务器迁移到 2012R2 服务器 但是当我尝试运行 PowerShell 脚本时 它给出了以下错误 我无法设置时间 无法设置日期 无法访问某些文件 无法从脚本运行计划任务 它一直给我访问被
  • .net maui blazor 混合 MSAL 身份验证

    我正在尝试通过适用于 Android 的 net maui blazor 进行身份验证 我已经设置了清单以正确反弹 AAD 并且我可以登录并从 azure 获取我的 ID 问题是令牌无法与 blazor 授权一起使用 我已经按照github
  • 如何使用 Spring Data Solr 实现多核和存储库的自定义 Solr 存储库

    我想使用 spring data solr 在一项服务中访问多个 2 个存储库 从Spring Data Solr 多核和存储库我知道 不幸的是 通过命名空间配置的多核支持是一个悬而未决的问题 您能帮我看一下以下示例吗 如何创建自定义存储库