봄 SOLR 데이터에 전체 용어를 얻을이 링크 참조 : 예를 들어, 테이블 도시 : 내 표에서 https://github.com/christophstrobl/spring-data-solr-showcase가 어떻게 봄의 데이터 SOLR를 사용하고
을, 나는 행의 임기를 얻고 싶은
id: 1
name: San Francisco
인터페이스 :
interface ProductRepository extends SolrCrudRepository<Product, String> {
@Highlight(prefix = "<b>", postfix = "</b>")
@Query(fields = { SearchableProductDefinition.ID_FIELD_NAME,
SearchableProductDefinition.NAME_FIELD_NAME,
SearchableProductDefinition.AVAILABLE_FIELD_NAME }, defaultOperator = Operator.AND)
HighlightPage<Product> findByNameIn(Collection<String> names, Pageable page);
@Facet(fields = { SearchableProductDefinition.NAME_FIELD_NAME})
FacetPage<Product> findByNameStartsWith(Collection<String> nameFragments, Pageable pagebale);
}
방법은 서비스에서 용어를 얻을 :
public FacetPage<Product> autocompleteNameFragment(String fragment, Pageable pageable) {
if (StringUtils.isBlank(fragment)) {
return new SolrResultPage<Product>(Collections.<Product> emptyList());
}
return productRepository.findByNameStartsWith(splitSearchTermAndRemoveIgnoredCharacters(fragment), pageable);
}
private Collection<String> splitSearchTermAndRemoveIgnoredCharacters(String searchTerm) {
String[] searchTerms = StringUtils.split(searchTerm, " ");
List<String> result = new ArrayList<String>(searchTerms.length);
for (String term : searchTerms) {
if (StringUtils.isNotEmpty(term)) {
result.add(IGNORED_CHARS_PATTERN.matcher(term).replaceAll(" "));
}
}
return result;
}
난 그냥 도시 테이블에 결과를 받았다 검색 인 경우 :
'San'
그러나 예상 된 결과는 다음과 같습니다
'San Francisco'
의 schema.xml :( 업데이트)
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/> <!-- StandardTokenizerFactory-->
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/> <!-- StandardTokenizerFactory-->
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
나는 tokenizer를 대체했습니다 : StandardTokenizerFactory by KeywordTokenizerFactory a nd 얻을 수있는 값 : '샌프란 시스코'자동 완성에 있지만
이 경우 전체 기간을 얻는 방법? 너무 감사합니다 !
안녕하세요 @ Persimmonium : 답장을 보내 주셔서 감사합니다. 위와 같이 schema.xml을 업데이트했고 값을 반환했습니다. –