2012-02-29 10 views
7

io uso solr per le mie applicazioni e ho integrato la componente di controllo ortografico, ma ho qualche problema:Solr Forse cercavi (Controllo ortografico componente)

Primo: quando si digita un termine separato da uno spazio mi danno la correzione per ogni termine

esempio: "ters wat" =>"cosa termine" ma il vero è Watters

in secondo luogo: quando si digita in modo me frase con un termine sbagliato. sebbene gli altri termini siano corretti applicano l'incantesimo per tutti i termini.

Ad esempio: "Difreences in lankuage convenzioni usa" => "Differenze nell'uso del linguaggio conversioni".

il vero è "Differenze nell'uso del linguaggio convenzioni"

Questo è il mio config nella 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:

Tipo

campo:

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

campi:

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

Copy I campi

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

Gradirei il vostro aiuto

Acclamazioni

+0

Bella domanda ... hai qualche tutorial che hai usato per imparare di più su lucene ... oltre alla documentazione ufficiale dalla pagina Solr? Ty –

+0

@Sebastian: ** Tutorial di base: ** [Solr in 5 minuti] (http://www.solrtutorial.com/solr-in-5-minutes.html), [Apache Lucene quick-start guida] (http://www.ibm.com/developerworks/opensource/tutorials/os-apachelucene/). ** Esercitazione avanzata: ** [Dzone Solr Tutorial] (http://www.dzone.com/links/search.html?query=solr+lucene&x=-1335&y=-4). Esempi **: ** [solr Drupal per Drupal] (https://drupal.org/project/apachesolr), [Apache Solr per WordPress] (http://wordpress.org/plugins/solr- for-wordpress /), [Manuale Solr Php] (http://php.net/manual/fr/book.solr.php). Buona fortuna, spero che aiuti;) – ZendMind

+0

** Libri: ** [Lucene and Solr: The Definitive Guide] (http://www.amazon.com/Lucene-Solr-Definitive-comprehensive-realtime/dp/1449359957/ref = sr_1_3? S = libri & ie = UTF8 e qid = 1378896499 & sr = 1-3 & keywords = solr), [Ricettario Apache Solr 4] (http://www.amazon.com/Apache-Solr-Cookbook-Rafal-Kuc/ dp/1782161325/ref = sr_1_1? s = libri & ie = UTF8 & qid = 1378896499 & sr = 1-1 = & parole chiave Solr). – ZendMind

risposta

1

Per il primo problema si potrebbe usare WordBreakSpellChecker

quanto riguarda la seconda problema che potresti impostare <str name="spellcheck.onlyMorePopular">true</str> a <str name="spellcheck.onlyMorePopular">false</str> e vedere se questo ha il risultato previsto.

+0

Ciao Klein, thnk's per la tua risposta, sto usando appach-solr3.5 per interagire con php. Puoi dirmi come posso usare questa patch? Cheers – ZendMind

+0

WordBreakSpellChecker è standard in appach-solr3.5? – ZendMind

+0

Non è standard. Devi applicarlo alla fonte e costruire un nuovo barattolo/guerra. –