2012-11-01 5 views
2

저는 Solr을 처음 사용 했으므로 제목과 설명의 두 필드를 기반으로 자동 완성 기능을 구현하고 싶습니다. 또한 결과 집합은 id 및 category와 같은 다른 필드에 의해 더 제한되어야합니다. 샘플 데이터 :solr 여러 필드에서 키워드 자동 완성

Title: The brown fox lives in the woods 
Description: The fox is found in the woods where brown leaves cover the ground. The animal's fur is brown in color and has a long tail. 

원하는 자동 완성 결과 :

<fieldType name="autocomplete" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="25" /> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 


<field name="id" type="int" indexed="true" stored="true"/> 
<field name="category" type="string" indexed="true" stored="true"/> 
<field name="title" type="text_general" indexed="true" stored="true"/> 
<field name="description" type="text_general" indexed="true" stored="true"/> 

<field name="ac-terms" type="autocomplete" indexed="true" stored="false" multiValued="true" omitNorms="true" omitTermFreqAndPositions="false" /> 
<copyField source="title" dest="ac-terms"/> 
<copyField source="description" dest="ac-terms"/> 

쿼리 요청 :

http://localhost:9090/solr/select?q=(ac-terms:brown) 

답변

4

다음 구성을 사용하여 해결 ShingleFilterFactory :

<fieldType name="autocomplete" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="ac-terms" type="autocomplete" indexed="true" stored="false" multiValued="true" omitNorms="true" omitTermFreqAndPositions="false" /> 
<copyField source="title" dest="ac-terms"/> 
<copyField source="description" dest="ac-terms"/> 

질의 요청 :

http://localhost:9090/solr/select?q=&facet=true&facet.field=ac-terms&facet.prefix=brown 

결과 :

brown color 
brown fox 
brown leaves 
,745,

호프가 도움이 되었기 바랍니다.

+0

이 결과를 주문하는 방법이 있습니까? – lennard

0

무엇에 대한 다음

brown fox 
brown leaves 
brown color 

가의 schema.xml에서 관련 항목입니다 들판을 만들다 spellcheck_text 복사 필드 기능을 사용하여 titledescription이 자동으로 spellcheck_text으로 전송됩니까?

은 ... 당신이 그 문서의 '도착' 필드에 인덱스에 추가 된 문서의 "소스"필드에서 볼 수있는 데이터를 복제 할 것을 SOLR을 지시합니다. ... 원래 텍스트은 "source"필드에서 "dest"필드로 보내지기 전에 발신 또는 수신 필드에 대해 구성된 분석기 이 호출됩니다.

http://wiki.apache.org/solr/SchemaXml#Copy_Fields

+0

ac- terms을 선언하지 않았습니까? 내가 뭘 놓치고 있니? 그런 위대한 사례에 대해 감사합니다. – Boyan

관련 문제