2012-02-29 16 views
7

używam solr dla moich aplikacji i zintegrowany moduł sprawdzania pisowni, ale mam pewne problemy:Solr miałeś na myśli (sprawdzanie pisowni komponent)

pierwsze: Gdy wpisuję hasło oddzielone spacją Dają mi korektę dla każdego terminu

np "wat" TERS =>"co termin" ale prawdą jest Watters

drugie: Kiedy wpisuję więc dla mnie fraza ze złym terminem. chociaż pozostałe warunki są poprawne, stosują je do wszystkich warunków.

np "Difreences w lankuage użytku konwencje" => "Różnice w użyciu języka konwersji".

Prawdziwa jest "Różnice w użyciu język konwencji"

To jest mój config w solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
      <str name="queryAnalyzerFieldType">textSpell</str> 
      <lst name="spellchecker"> 
       <str name="name">default</str> 
       <str name="field">spell</str> 
       <str name="spellcheckIndexDir">spellchecker</str> 
      </lst> 
</searchComponent> 

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> 
      <lst name="defaults"> 
       <str name="spellcheck.onlyMorePopular">true</str> 
       <str name="spellcheck.extendedResults">false</str> 
       <str name="spellcheck.count">1</str> 
      </lst> 
      <arr name="last-components"> 
       <str>spellcheck</str> 
      </arr> 
</requestHandler> 

schema.xml:

typ

Pole:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
       <filter class="solr.SnowballPorterFilterFactory" language="English"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
       <filter class="solr.SnowballPorterFilterFactory" language="English"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      </analyzer> 
      <analyzer type="multiterm" > 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
      </analyzer> 
     </fieldType> 


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

dziedzinach:

<field name="title" type="text" indexed="true" stored="true" termVectors="true"/> 
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> 

Kopiuj Pola

<copyField source="title" dest="spell"/> 

będę wdzięczny za pomoc

Cheers

+0

Ładne pytanie ... czy masz samouczek, którego używałeś, aby dowiedzieć się więcej o lucene ... inne niż oficjalna dokumentacja ze strony Solr? Ty –

+0

@Sebastian: ** Podstawowy samouczek: ** [Solr w 5 minut] (http://www.solrtutorial.com/solr-in-5-minutes.html), [Szybki start Apache Lucene przewodnik] (http://www.ibm.com/developerworks/opensource/tutorials/os-apachelucene/). ** Zaawansowany samouczek: ** [Samouczek Solone] (http://www.dzone.com/links/search.html?query=solr+lucene&x=-1335&y=-4). ** Przykłady: ** [solr Drupal dla Drupala] (https://drupal.org/project/apachesolr), [Apache Solr dla WordPress] (http://wordpress.org/plugins/solr- for-wordpress /), [Solr Php Manual] (http://php.net/manual/fr/book.solr.php). Powodzenia, mam nadzieję, że to pomaga;) – ZendMind

+0

Książki **: ** [Lucene i Solr: The Definitive Guide] (http://www.amazon.com/Lucene-Solr-Definitive-comprehensive-realtime/dp/1449359957/ref = sr_1_3? s- książki & ie = UTF-8-QID = 1378896499 & sr = 1-3 i słowa kluczowe = Solr) [Apache SOLR 4 Cookbook] (http://www.amazon.com/Apache-Solr-Cookbook-Rafal-Kuc/ dp/1782161325/ref = sr_1_1? s = books & ie = UTF8 & qid = 1378896499 & sr = 1-1 & keywords = solr). – ZendMind

Odpowiedz

1

przypadku pierwszego problemu można użyć WordBreakSpellChecker

Co do sekundy problem można ustawić <str name="spellcheck.onlyMorePopular">true</str> do <str name="spellcheck.onlyMorePopular">false</str> i sprawdź, czy ma oczekiwany rezultat.

+0

Cześć Klein, dziękuję za odpowiedź, używam appach-solr3.5 do interakcji z php. Czy możesz mi powiedzieć, jak mogę użyć tej poprawki? Pozdrawiam – ZendMind

+0

Czy WordBreakSpellChecker jest standardem w appach-solr3.5? – ZendMind

+0

To nie jest standard. Musisz zastosować go do źródła i zbudować nowy słoik/wojnę. –

Powiązane problemy