Solr - Synonyme, die mehrere Wörter enthalten

Kurze Frage, ich weiß nicht, wie ich mit Synonymen umgehen soll, die ein Leerzeichen enthalten! Ich habe die folgende Konfiguration:

Die SOLR-Konfigurationsdatei

<fieldType ... >
  <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" 
                            catenateWords="1" 
                            preserveOriginal="1"
                            splitOnCaseChange="1"
                            generateWordParts="1" 
                            generateNumberParts="1"         
                            catenateNumbers="1" 
                            catenateAll="1" 
                            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
  </analyzer>
  <analyzer type="query">    
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="70" />
    <filter class="solr.SynonymFilterFactory" synonyms="syn.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
 </analyzer>
</fieldType>

Meine Datei: syn.txt

st., st => saint
istambul => istanbul
airport, apt => aéroport
NYC => New York
pt., pt => port
brussels => bruxelles

Alles hat gut funktioniert, außer dem Synonym:

"NYC => New York"

Ich habe ein paar Nachforschungen angestellt und folgendes gefunden:

Beachten Sie, dass der SynonymFilter zwar gerne mit Synonymen arbeitet, die mehrere Wörter enthalten (z. B. "Seekeks, Seekeks, Seekeks").

Der empfohlene Ansatz für den Umgang mit solchen Synonymen besteht darin, das Synonym bei der Indizierung zu erweitern. Dies liegt daran, dass zwei potenzielle Probleme bei der Abfrage auftreten können:

Der Lucene QueryParser markiert Leerzeichen, bevor Text an den Analysator gesendet wird. Wenn eine Person also nach den Wörtern Sea Biscit sucht, erhält der Analysator die Wörter "Sea" und "Biscit" separat und weiß nicht, dass sie mit einem Synonym übereinstimmen .

Die Phrasensuche (dh "Sea Biscit") veranlasst den QueryParser, die gesamte Zeichenfolge an den Analyzer zu übergeben. Wenn der SynonymFilter jedoch so konfiguriert ist, dass die Synonyme erweitert werden, wird die resultierende Liste der Token vom Analyzer zurückgegeben erstellt eine MultiPhraseQuery, die nicht den gewünschten Effekt hat.

Dies liegt an dem begrenzten Mechanismus, der dem Analysator zur Verfügung steht, um anzuzeigen, dass zwei Begriffe dieselbe Position einnehmen: Es gibt keine Möglichkeit, anzuzeigen, dass ein "Ausdruck" dieselbe Position wie ein Begriff einnimmt.

In unserem Beispiel wäre die resultierende MultiPhraseQuery "(sea | sea | seabiscuit) (biscuit | biscit)", was nicht dem einfachen Fall von "seabiscuit" in einem Dokument entspricht

Also habe ich versucht, meine Konfigurationsdatei zu ändern und meine Filter bei der Indizierung hinzuzufügen, aber es funktioniert nicht.

Hatte etwas ein paar Ideen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage