2014-11-24 6 views
1

구문 쿼리에 자동 완성 기능을 추가하려고합니다. 다음과 같은 구성을 가지고 - 을의 schema.xml 파일 나는 다음과 같은 일을 설정하고 또한문구 자동 완성

<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
     <str name="name">default</str> 
     <str name="classname">solr.IndexBasedSpellChecker</str>  
     <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.AnalyzingLookupFactory</str>  <!-- org.apache.solr.spelling.suggest.fst --> 
     <str name="dictionaryImpl">DocumentDictionaryFactory</str>  <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory --> 
     <str name="field">textSpell</str> 
     <float name="thresholdTokenFrequency">.0001</float> 

    <!-- <str name="weightField">price</str>--> 
     <str name="suggestAnalyzerFieldType">string</str> 
     <str name="buildOnCommit">true</str> 
     <!--<str name="buildOnOptimize">true</str>--> 

    </lst> 
    </searchComponent> 

    <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
    <lst name="defaults"> 
     <str name="suggest">true</str> 
     <str name="suggest.count">10</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
    </arr> 
    </requestHandler> 

    <!-- Suggest Phrase --> 
    <searchComponent name="suggest_phrase" class="solr.SpellCheckComponent"> 
     <lst name="spellchecker"> 
      <str name="name">suggest_phrase</str> 
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
      <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookup</str> 
      <str name="field">suggest_phrase</str> 
      <str name="buildOnCommit">true</str> 
     </lst> 
    </searchComponent> 

    <requestHandler class="solr.SearchHandler" 
     name="/suggest_phrase" startup="lazy"> 
     <lst name="defaults"> 
      <str name="spellcheck">true</str> 
      <str name="spellcheck.dictionary">suggest_phrase</str> 
      <str name="spellcheck.onlyMorePopular">true</str> 
      <str name="spellcheck.count">10</str> 
      <str name="spellcheck.collate">false</str> 
     </lst> 
     <arr name="components"> 
      <str>suggest_phrase</str> 
     </arr> 
    </requestHandler> 

solrconfig.xml에서

<field name="textSpell" type="spell" indexed="true" stored="true" 
     multiValued="true" termVectors="true" termPositions="true" 
     termOffsets="true" /> 
<field name="suggest_phrase" type="suggest_phrase" indexed="true" 
     stored="false" multivalued="false"/> 

에 - 쿼리가 solrj

SolrQuery suggestQuery = new SolrQuery(); 
suggestQuery.setParam(CommonParams.QT, "/terms"); 
suggestQuery.setParam(TermsParams.TERMS, true); 
suggestQuery.setParam(TermsParams.TERMS_LIMIT, "5"); 
suggestQuery.setParam(TermsParams.TERMS_FIELD,"content"); 
suggestQuery.setParam(TermsParams.TERMS_LOWER, query); 
suggestQuery.setParam(TermsParams.TERMS_PREFIX_STR, query); 
suggestQuery.setParam("spellCheck", "true"); 
suggestQuery.setParam("spellcheck.q", query); 
사용 SOLR하기

그러나 구문 쿼리의 결과가 단일 용어로만 작동합니다. 어떤 제안. Solr4.10.2를 사용 중입니다.

답변

0

"spell"과 "suggest_phrase"의 두 필드 유형을 사용하고 있습니다. 어떻게 정의됩니까? 가장 먼저 확인해야 할 것은 WhitespaceTokenizerFactory를 사용 중인지 여부입니다. 어떤 경우에는 구문에서 공간이 토큰을 종료하므로 구문에서 작동하지 않습니다.