2017-01-13 2 views
0

ich das folgende Feld konfigurieren: In meinem SOLR haben:Ignorieren Sonderzeichen

<fieldType name="title" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" preserveOriginal="1" catenateAll="1" splitOnCaseChange="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Im Bereich I Speicherung werden könnte:

Spiderman, Spiderman, Spinnenmann

Was würde ich wie für jemanden, der nach Spiderman sucht, um alle 3 Optionen zu erhalten und im Idealfall jemanden, der Spider-Man sucht, um alle 3 Optionen zu erhalten. Abgesehen von der Änderung des Inhalts, wenn er indiziert wird, gibt es eine andere Möglichkeit, Sonderzeichen effektiv zu ignorieren, aber nicht notwendigerweise auf ihnen zu teilen.

Antwort

0

Eine der möglichen Lösungen, vor allem, wenn die Anzahl der Trennzeichen Zeichen klein ist, ist sie über solr.PatternReplaceFilterFactory wie folgt zu ersetzen:

<fieldType name="title" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.KeywordTokenizerFactory"/> 
       <filter class="solr.PatternReplaceFilterFactory" pattern="-" replacement=""/> 
       <filter class="solr.PatternReplaceFilterFactory" pattern=" " replacement=""/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.KeywordTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
     </fieldType> 

Wenn Stichwort tokenizer schlechte Option ist, da es einen Token erhalten wird (was für ein Feld wie Titel in Ordnung sein könnte), Sie könnten entweder Ihren eigenen Tokenizer erstellen, der den Titel nur auf benötigte Symbole aufteilt oder zusätzliche Filter wie ngram hinzufügen, um eine Teilübereinstimmung im Titelfeld zu erlauben.