【问题标题】:indexing document to a specific collection using spring data solr使用 spring data solr 将文档索引到特定集合
【发布时间】:2015-04-05 20:28:53
【问题描述】:

我正在尝试将文档索引到 solr 中的特定集合。集合名称是“程序”。我正在使用 Spring Data solr。

我在尝试保存文档时收到以下错误:

HTTP ERROR 404
Problem accessing /solr/update. 
Reason:Not Found

我的假设是注释 @SolrDocument 无法识别。 spring-data-solr 正在尝试将文档发布到 /solr/update,而它应该尝试将其发布到 /solr/program/update。但是我不确定如何证明或修复它。

我的架构可在以下链接中找到:

http://<solr-host>/solr/program/schema

更新请求处理程序可在以下链接中找到:

http://<solr-host>/solr/program/update

spring-config-xml

<context:annotation-config />
<context:component-scan base-package="com.oostnet.controllers, com.oostnet.models, com.oostnet.services" />
<mvc:annotation-driven />

<solr:solr-server id="solrServer" url="http://<solr-host>/solr" />

<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
    <constructor-arg ref="solrServer" />
</bean>

<solr:repositories base-package="com.oostnet.solr.repositories" />

模型定义:

package com.oostnet.models.documents;

@SolrDocument(solrCoreName="program")
public class Program {

    @Id
    @Indexed
    private String id;
    <more variables>
}

存储库定义:

package com.oostnet.solr.repositories;

public interface ProgramRepository extends SolrCrudRepository<Program, String> {

}

控制器:

package com.oostnet.controllers;

public class ProgramController{
    private ProgramRepository programRepository;
    @Autowired
    public void setProgramRepository(ProgramRepository programRepository) {
        this.programRepository = programRepository;
    }
    public void createProgram(Program program) {
        programRepository.save(program);
    }
}

以下是使用的版本:

<spring.data.solr.version>1.3.2.RELEASE</spring.data.solr.version>
<spring.version>4.1.4.RELEASE</spring.version>
solr server version - solr-spec 4.10.2 

【问题讨论】:

  • 您可以访问program 核心管理页面吗?
  • @sidgate 是的。那里没有例外。我使用网址 http:///solr/#/program 访问它
  • 您使用的是哪个版本的 spring-data-solr??
  • @Swaraj 该版本在我的帖子中可用。它的 1.3.2.RELEASE。

标签: spring solr spring-data spring-annotations spring-data-solr


【解决方案1】:

要处理多个集合,您需要在 spring 配置下启用多个存储库,如下所示:-

<context:annotation-config />
<context:component-scan base-package="com.test.solr" />

<solr:solr-server id="solrServer" url="http://localhost:8983/solr" />

<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
    <constructor-arg ref="solrServerFactory" />
</bean>

<solr:repositories base-package="com.test.solr.repositories" multicore-support="true" />
<bean id="solrServerFactory"
    class="org.springframework.data.solr.server.support.MulticoreSolrServerFactory">
    <constructor-arg ref="solrServer" />
    <constructor-arg name="cores">
        <list>
            <value>program</value>
        </list>
    </constructor-arg>
</bean>

【讨论】:

  • 那如何指定核心名称呢?
  • 在 pojo 上添加 @SolrDocument(solrCoreName="program")。这将从工厂获取程序集合 url。
猜你喜欢
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多