2012-02-07 7 views
5

Ustawiłem moduł sprawdzania pisowni dla przykładowej konfiguracji instalacji dołączonej do Solr. Postępowałem zgodnie z ich instrukcjami do sprawdzania pisowni: [http://wiki.apache.org/solr/SpellCheckComponent][1]Solr - przykładowy sprawdzanie pisowni nie działa

Mam problem, że po wykonaniu go dokładnie nadal nie mogę go uruchomić?

Odpowiedź kiedy budować (http: // localhost: 8983/solr/q spell = : & spellcheck.build = true & spellcheck.q = delll% 20ultrashar & pisowni = true)

wygląda następująco:

<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> 

I kiedy frazę http://localhost:8983/solr/spell?q=: & spellcheck.q = delll + ultrashar & pisowni = true & spellcheck.extendedResults = true

mam następującą odpowiedź

<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> 

Co daje? Czy brakuje mi czegoś w moim pliku schema.xml?

schema.xml jest tutaj: http://www.developermill.com/schema.xml

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

Jedyna zmiana do przykładowych plików było dodanie następujących w 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

Czy możesz tutaj wkleić odpowiednie części 'solrconfig.xml' i' schema.xml'? – javanna

+0

Oto łącza do dwóch. Ograniczenie znaków tutaj jest mało do wklejenia. http://www.developermill.com/solrconfig.xml http://www.developermill.com/schema.xml -> Jedyną zmianą, którą wprowadziłem, było plik solrconfig.xml, który zaczyna się od < searchComponent name = "spellcheck" class = "solr.SpellCheckComponent"> na samym dole –

+0

Zauważyłem, że połączony "solrconfig.xml" jest inny niż ten wklejony w pytaniu. Którego używasz? Może powinieneś zadać pytanie właśnie to. – javanna

Odpowiedz

2

Definicja pola textSpell jest w niewłaściwym miejscu. Poniższy fragment powinien być w tagu types wewnątrz schema.xml:

<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> 

Po ustalone, że wszystko powinno działać jak sądzę, ale sugeruję, aby pracować na sprzątanie trochę swoim przykładzie, ponieważ w zasadzie zawiera wszystko, co możesz skonfigurować. Powinieneś zachować to, czego naprawdę potrzebujesz.

+0

Dzięki Javanna, poprawiłem mój dokument, jak wskazałeś powyżej. To był jeden z problemów. Jednak napotkałem inny problem - to, że budowanie kwerendy nie zbudować? Aby rozwiązać ten problem, musiałem dodać true w moim searchComponent. Czy ktoś wie, dlaczego zapytanie o kompilację nie działa? –

+0

Znalazłeś jakiś błąd w swoim pliku dziennika? To dziwne, ponieważ indeks jest zbudowany w ten sam sposób. To, co zmieniłeś, to moment, w którym został zbudowany.Wcześniej został zbudowany ręcznie, w rzeczywistości jest automatycznie budowany po każdym zatwierdzeniu. – javanna

+0

Dzięki, będę musiał rzucić okiem na te ... –