[SPRING] Spring 데이터 Solr 다중 코어 및 저장소
SPRINGSpring 데이터 Solr 다중 코어 및 저장소
내가 여러 코어와 아파치 solr 예. 통화, 국가 등등 ... 그래서 스프링 데이터 Solr을 사용하여 하나의 코어에서 정보를 검색 할 수 있습니다. 이 XML 설정은 현재 '통화'코어에 대해 쿼리하고 있습니다. 'country'core에 대해 쿼리하고 싶다면 어떻게 설정해야합니까?
<!-- Enable Solr repositories and configure repository base package -->
<solr:repositories base-package="com.acme.repository" solr-template-ref="solrCurrencyTemplate"/>
<solr:solr-server id="solrCurrencyServer" url="http://localhost:8983/solr/currency"/>
<bean id="solrCurrencyTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg ref="solrCurrencyServer" />
</bean>
저장소를 다음과 같이 정의하십시오.
@Repository
public interface CurrencyRepository extends SolrCrudRepository<Currency, String> {
}
그리고 내 봉사에서 나는 이것을 할 수있다.
@Override
public List<Currency> getCurrencies() {
Page<Currency> currencies = (Page<Currency>) currencyRepository.findAll();
return currencies.getContent();
}
나는 또한 @ SolderDocument (solrCoreName = "currency")를 사용하여 시도했지만이 작업은 효과가 없다.
@SolrDocument(solrCoreName = "currency")
public class Currency {
public static final String FIELD_CURRENCY_NAME = "currency_name";
public static final String FIELD_CURRENCY_CODE = "currency_code";
public static final String FIELD_DECIMALS = "decimals";
@Id
@Field(value = FIELD_CURRENCY_CODE)
private String currencyCode;
//currency_name,decimals
@Field(value = FIELD_CURRENCY_NAME)
private String currencyName;
@Field(value = FIELD_DECIMALS)
private String decimals;
...
...
...
}
나는이 도움에 대한 도움이 필요하다. 그렇지 않으면 RestTemplate Solution으로 돌아 가야 할 것이다 :-(
누군가가 도울 수 있기를 바랍니다. 감사 GM
해결법
-
==============================
1.공유 할 줄 알았는데 최근에 여러 코어를 구성하는 데 많은 시간을 소비합니다. 우리는 java가 아니라 xml을 사용했습니다.
공유 할 줄 알았는데 최근에 여러 코어를 구성하는 데 많은 시간을 소비합니다. 우리는 java가 아니라 xml을 사용했습니다.
spring @configuration의 일부로 다음을 추가하십시오.
@Bean(name="solrCore1Template") public SolrTemplate solrCore1Template() throws Exception { EmbeddedSolrServer embeddedSolrServer = new EmbeddedSolrServer(getCoreContainer(), "core1"); return new SolrTemplate(embeddedSolrServer); } @Bean(name="solrCore2Template") public SolrTemplate solrCore2Template() throws Exception { EmbeddedSolrServer embeddedSolrServer = new EmbeddedSolrServer(getCoreContainer(), "core2"); return new SolrTemplate(embeddedSolrServer); } @Bean @Scope public CoreContainer getCoreContainer() throws FileNotFoundException{ String dir = <path_to_solr_home>; System.setProperty("solr.solr.home", dir); CoreContainer.Initializer initializer = new CoreContainer.Initializer(); return initializer.initialize(); }
그리고 서비스 클래스에서 아래와 같이 각 템플릿을 사용합니다.
@Resource private SolrTemplate solrCore1Template;
임베디드 서버는 아래 코드를 사용하여 HTTP로 바꿀 수 있습니다.
HttpSolrServer httpSolrServer = new HttpSolrServer(getSolrURL()); return new SolrTemplate(httpSolrServer, "core1");
희망이 도움이됩니다. 내가 물었던 질문에 대한 답변이 매우 늦었다.
-
==============================
2.네임 스페이스 구성을 통한 멀티 코어 지원은 불행히도 미해결 문제입니다. 각 코어에 대해 별도의 SolrTemplate을 가지고 리포지토리를 수동으로 생성해야합니다.
네임 스페이스 구성을 통한 멀티 코어 지원은 불행히도 미해결 문제입니다. 각 코어에 대해 별도의 SolrTemplate을 가지고 리포지토리를 수동으로 생성해야합니다.
@Autowired @Qualifier("solrCurrencyTemplate") private SolrTemplate solrCurrencyTemplate; @Autowired @Qualifier("solrCountryTemplate") private SolrTemplate solrCountryTemplate; //... CurrencyRepository currencyRepo = new SolrRepositoryFactory(this.solrCurrencyTemplate) .getRepository(CurrencyRepository.class); CountryRepository countryRepo = new SolrRepositoryFactory(this.solrCountryTemplate) .getRepository(CountryRepository.class);
-
==============================
3.Spring Data Solr 1.1.0.RC1을 사용하면 Christoph Strobl이 @EnableSolrRepositories를 사용하여 설명한 것처럼 여러 코어가 작동합니다. 또한 multicore-support = "true"로 설정하여 XML 구성에서도 작동합니다.
Spring Data Solr 1.1.0.RC1을 사용하면 Christoph Strobl이 @EnableSolrRepositories를 사용하여 설명한 것처럼 여러 코어가 작동합니다. 또한 multicore-support = "true"로 설정하여 XML 구성에서도 작동합니다.
<solr:repositories base-package="your.solr.repo.package" repository-impl-postfix="Impl" multicore-support="true"/> <solr:solr-server id="solrServer" url="${solr.server.base.connection.url}" /> <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate"> <constructor-arg index="0" ref="solrServer" /> </bean>
-
==============================
4.
<solr:solr-server id="solrServer" timeout="1000" maxConnections="1000" url="${solr.server.1},${solr.server.2}"/> <bean id="solrServerFactory" class="org.springframework.data.solr.server.support.MulticoreSolrServerFactory"> <constructor-arg ref="solrServer" /> <constructor-arg name="cores"> <list> <value>${solr.index.customer}</value> <value>${solr.index.task}</value> </list> </constructor-arg> </bean> <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate"> <constructor-arg ref="solrServerFactory" /> </bean> <solr:repositories base-package="com.deve.pig.solr" multicore-support="true" solr-template-ref="solrTemplate" />
-
==============================
5.Spring Data는 이제 각각의 리포지토리를 통해 여러 코어를 지원합니다.
Spring Data는 이제 각각의 리포지토리를 통해 여러 코어를 지원합니다.
@EnableJpaRepository 주석에서 multicoreSupport 플래그가 true이어야하고 해당 문서에 속해있는 코어를 알려야합니다. 처럼:
@SolrDocument(solrCoreName = "currency") public class Currency { // attributes }
다른 반은
@SolrDocument(solrCoreName = "country") public class Country { // attributes }
각각의 리포지토리는 그들이 작업하고있는 pojo를 알아야합니다.
public interface CurrencyRepository extends SolrCrudRepository<Currency,String> { }
과
public interface CountryRepository extends SolrCrudRepository<Country,String> { }
구성이 있어야합니다.
@Configuration @EnableSolrRepositories(value = "com.package.name",multicoreSupport = true) public class SolrConfig { @Bean public SolrServer solrServer() throws Exception { HttpSolrServerFactoryBean f = new HttpSolrServerFactoryBean(); f.setUrl("http://localhost:8983/solr"); f.afterPropertiesSet(); return f.getSolrServer(); } @Bean public SolrTemplate solrTemplate(SolrServer solrServer) throws Exception { return new SolrTemplate(solrServer()); } }
from https://stackoverflow.com/questions/16859181/spring-data-solr-multiple-cores-and-repository by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring은 모든 빈이 기본 생성자를 필요로 하는가? (0) | 2019.01.05 |
---|---|
[SPRING] Spring MVC에서 Form없이 Multipart 사용하기 (0) | 2019.01.05 |
[SPRING] 런타임 스프링에 삽입 할 구현 선택 (0) | 2019.01.05 |
[SPRING] 403 금지 된 오류 아약스 GET 요청 봄 (0) | 2019.01.05 |
[SPRING] Maven + Spring + 동적 웹 모듈 (Eclipse) = java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener (0) | 2019.01.05 |