2012-02-07 3 views
5

Solr과 함께 제공되는 설치 구성 예제에 대한 맞춤법 검사기를 설정했습니다. 나는 그 철자 검사기에 대한 지침을 다음과 같이 여기에있다. [http://wiki.apache.org/solr/SpellCheckComponent][1]Solr - 맞춤법 검사기 예가 작동하지 않습니다.

내가 가진 문제는 정확하게 따라하기 만하면 여전히 작동 할 수 있다는 것이다.

응답 내가 구축 (HTTP : // localhost를 : 8983/SOLR/철자 Q = : & spellcheck.build = 사실 & spellcheck.q = delll % 20ultrashar & 맞춤법 검사 = TRUE)

다음 보이는 : & spellcheck.q = delll + & 맞춤법 검사 ultrashar = 진정한:

<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">14</int> 
    </lst> 
     <str name="command">build</str> 
     <result name="response" numFound="17" start="0"> 
     ... 
     </result> 
     <lst name="spellcheck"> 
     <lst name="suggestions"/> 
    </lst> 
</response> 

을 그리고 http://localhost:8983/solr/spell?q=으로 쿼리 할 때

나는 다음과 같은 응답 무엇을 제공

<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">1</int> 
    </lst> 
    <result name="response" numFound="17" start="0"> 
    ... 
    </result> 
    <lst name="spellcheck"> 
     <lst name="suggestions"> 
     <bool name="correctlySpelled">false</bool> 
     </lst> 
    </lst> 
</response> 

을 얻을 사실spellcheck.extendedResults =? 내 schema.xml에 뭔가가 빠졌습니까?

의 schema.xml은 여기에 있습니다 : http://www.developermill.com/schema.xml

solrConfig.xml은 여기에 있습니다 :

: 예제 파일에 대한 유일한 변경이 (가) solrconfig.xml에 다음의 추가했다

http://www.developermill.com/solrconfig.xml

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 

    <lst name="spellchecker"> 
    <!-- 
     Optional, it is required when more than one spellchecker is configured. 
     Select non-default name with spellcheck.dictionary in request handler. 
    --> 
    <str name="name">default</str> 
    <!-- The classname is optional, defaults to IndexBasedSpellChecker --> 
    <str name="classname">solr.IndexBasedSpellChecker</str> 
    <!-- 
     Load tokens from the following field for spell checking, 
     analyzer for the field's type as defined in schema.xml are used 
    --> 
    <str name="field">spell</str> 
    <!-- Optional, by default use in-memory index (RAMDirectory) --> 
    <str name="spellcheckIndexDir">./spellchecker</str> 
    <!-- Set the accuracy (float) to be used for the suggestions. Default is 0.5 --> 
    <str name="accuracy">0.7</str> 
    <!-- Require terms to occur in 1/100th of 1% of documents in order to be included in the dictionary --> 
    <float name="thresholdTokenFrequency">.0001</float> 
    </lst> 
    <!-- Example of using different distance measure --> 
    <lst name="spellchecker"> 
    <str name="name">jarowinkler</str> 
    <str name="field">lowerfilt</str> 
    <!-- Use a different Distance Measure --> 
    <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str> 
    <str name="spellcheckIndexDir">./spellchecker</str> 

    </lst> 

    <!-- This field type's analyzer is used by the QueryConverter to tokenize the value for "q" parameter --> 
    <str name="queryAnalyzerFieldType">textSpell</str> 
</searchComponent> 
<!-- 
    The SpellingQueryConverter to convert raw (CommonParams.Q) queries into tokens. Uses a simple regular expression 
    to strip off field markup, boosts, ranges, etc. but it is not guaranteed to match an exact parse from the query parser. 

Optional, defaults to solr.SpellingQueryConverter 
--> 
<queryConverter name="queryConverter" class="solr.SpellingQueryConverter"/> 

<!-- Add to a RequestHandler 
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    NOTE: YOU LIKELY DO NOT WANT A SEPARATE REQUEST HANDLER FOR THIS COMPONENT. THIS IS DONE HERE SOLELY FOR 
    THE SIMPLICITY OF THE EXAMPLE. YOU WILL LIKELY WANT TO BIND THE COMPONENT TO THE /select STANDARD REQUEST HANDLER. 
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
--> 
<requestHandler name="/spellCheckCompRH" class="solr.SearchHandler"> 
    <lst name="defaults"> 
    <!-- Optional, must match spell checker's name as defined above, defaults to "default" --> 
    <str name="spellcheck.dictionary">default</str> 
    <!-- omp = Only More Popular --> 
    <str name="spellcheck.onlyMorePopular">false</str> 
    <!-- exr = Extended Results --> 
    <str name="spellcheck.extendedResults">false</str> 
    <!-- The number of suggestions to return --> 
    <str name="spellcheck.count">1</str> 
    </lst> 
    <!-- Add to a RequestHandler 
     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     REPEAT NOTE: YOU LIKELY DO NOT WANT A SEPARATE REQUEST HANDLER FOR THIS COMPONENT. THIS IS DONE HERE SOLELY FOR 
     THE SIMPLICITY OF THE EXAMPLE. YOU WILL LIKELY WANT TO BIND THE COMPONENT TO THE /select STANDARD REQUEST HANDLER. 
     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    --> 
    <arr name="last-components"> 
    <str>spellcheck</str> 
    </arr> 
</requestHandler> 
+0

'solrconfig.xml'과'schema.xml'의 관련 부분을 여기에 붙여주세요. – javanna

+0

두 가지 링크가 있습니다. 글자 수 제한은 붙여 넣기가 거의 없습니다. http://www.developermill.com/solrconfig.xml http://www.developermill.com/schema.xml -> 유일한 변경 사항은 solrconfig.xml의 < –

+0

링크 된'solrconfig.xml '이 질문에 붙여진 것과 다르다는 것을 발견했습니다. 어느 쪽을 사용하고 있습니까? 어쩌면 당신은 그 질문 하나를 계속 지켜야 할 것입니다. – javanna

답변

2

textSpell 필드 정의의 위치가 잘못되었습니다. , 당신이 모든 것을 내가 추측 일을해야한다는 고정 한 후

<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
    </analyzer> 
</fieldType> 

,하지만 난 당신이 조금 귀하의 예를 청소 작업을하는 것이 좋습니다 것 : 다음 단편은 schema.xml 내부의 types 태그 내에 있어야합니다 기본적으로 구성 할 수있는 모든 것이 포함되어 있기 때문입니다. 정말로 필요한 것을 지켜야합니다.

+0

감사합니다. Javanna, 위와 같이 문서를 수정했습니다. 그것은 문제 중 하나였습니다. 그러나 나는 또 다른 문제를 겪었습니다. 즉 빌드 쿼리가 빌드되지 못했습니다. 이 문제를 해결하려면 true 을 내 searchComponent에 포함시켜야했습니다. 누구든지 빌드 쿼리가 실패하는 이유를 알고 있습니까? –

+0

로그 파일에 오류가 있습니까? 인덱스가 같은 방식으로 만들어 졌기 때문에 이상합니다. 당신이 바꾼 것은 그것이 만들어지는 순간입니다.이전에는 수동으로 빌드되었지만 실제로는 모든 커밋 후에 자동으로 빌드됩니다. – javanna

+0

감사합니다. 나는 그걸 보게 될 것입니다 ... –