2013-07-02 10 views
5

Ich bin nicht in der Lage, getrennte Begriffe in meinen SOLR-Suchergebnissen abzurufen. Zum Beispiel, wenn ich versuche, eine Suche wie Superman, Supermann etc. zu machen, sollte ich Titel wie Super-Mann, Super-Mann3 usw. in meinen Suchergebnissen sehen.Solr: Suche nach Bindestrichen gibt 0 Ergebnisse

Die Fieldtype ist wie folgt:

<fieldType name="autocomplete_edge" class="solr.TextField"> 
    <analyzer type="index"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="1" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="^(.{30})(.*)?" replacement="$1" replace="all" /> 
    </analyzer> 
</fieldType> 

Bitte helfen.

Grüße

+0

können Sie bitte den Feldtyp in besser lesbarem Format veröffentlichen? – Jayendra

+0

Hallo, die ursprüngliche Frage wird bearbeitet, um Inhalte in einem besser lesbaren Format zu haben.Suchbegriffe wie Super, Super-, Super-Man, Superman geben die gewünschten Titel zurück. Der Fall, in dem es scheitert, ist: super man, der 0 Ergebnisse gibt –

Antwort

2

Ich würde vorschlagen, WordDelimiterFilterFactory für Ihren Anwendungsfall mit.

Mit WordDelimiterFilterFactory können Sie Tokens generieren, die auf Sonderzeichen und Zahlen aufgeteilt werden können, und das Original beibehalten, damit es den Suchbegriffen entspricht.

für z.B.
generateWordParts umwandeln würde super-man ->super, man
splitOnNumerics wäre super-man3 erzeugen ->super, man, 3
catenateWords umwandeln würde super-man ->superman
catenateAll umwandeln würde super-man3 ->superman3

So würde das Sie bieten die Möglichkeit, passen Sie die Kombination der gleichen Wörter

0

Angenommen, Sie sind Tokeni Zing Ihre Bindestriche ok (siehe WordDelimiterFilterFactory wie in der Antwort unten erwähnt) dann ist Ihr Standardfeld (df) in Ihrer SOLR-Konfigurationsdatei oder als Parameter übergeben (& df = xxxx) das gleiche wie das Feld, das Sie Tokenizing sind?

Sagen Sie Ihre Standardfeld ist: Text und Ihre indizierten Feld:

nennen Wenn wir für Supermann

name:super man 

Die eigentliche Abfrage Abfrage ist:

parsedquery_toString: "+name:super +text:man" 

Welche gewonnen nicht übereinstimmen. Wenn Sie in Anführungszeichen für super man fragen:

name:"super man" 

sollte es funktionieren, ist aber weniger flexibel:

parsedquery_toString: "name:\"super man\"", 

, wenn Sie Ihre df Namen gesetzt (zB die indizierte Feld entspricht) gibt es:

parsedquery_toString: "+name:super +name:man" 

oder Sie können direkt abfragen

name:super name:man 

Beachten Sie, wenn Sie Dismax verwenden, müssen Sie möglicherweise das Feld mm betrachten, wenn Sie immer noch nicht übereinstimmen.