2017-05-29 4 views
0

Ist es möglich, ein Solr-Feld so zu konfigurieren, dass es mehrere/geteilte Filterketten hat? Zum Beispiel könnte ich eine Filterkette erstellen, das sieht aus wie ?:Mehrere/geteilte Filterketten für ein einzelnes Solr-Feld

 StandardTokenizer 
       ↓ 
     LowerCaseFilter 
      ↙   ↘ 
    SynonymnFilter PhoneticFilter  
     ↓ 
    NGramFilter 

ich ziemlich viel Such getan haben und haben keine Beispiele für den Aufbau einer Filterkette auf diese Weise gefunden.

EDIT

Der Hauptgrund, warum ich dies im Rahmen eines einzelnen Feldes tun möchte (im Gegensatz zu der Indizierung der Daten zweimal mit einer Kopie Feld) gemacht ist für die Hervorhebung. Wenn ich eine Kopie Feld verwenden Sie eine andere Filterkette auf den gleichen Daten, meine Hervorhebung Ergebnisse zurückkommen wie folgt auszuführen:

"highlighting":{ 
    "1234": { 
    "firstName_phonetic":["<hl>John</hl>"], 
    "firstName_ngram":["<hl>John</hl>"] 
    } 
} 

Dies macht die Ergebnisse raubend ein bisschen schwieriger als die verzehrende App wählen muss, die hervorgehoben Feld zum Anzeigen. Im Idealfall würde ich etwas zurück wie diese:

"highlighting":{ 
    "1234": { 
    "firstName":["<hl>John</hl>"] 
    } 
} 

Antwort

1

Der Ausgang eines Filters geht zum nächsten Filter in der Kette. Es gibt keine Unterstützung für "Verzweigen".

Sie implementieren diese Methode, wenn Sie einen benutzerdefinierten Filter möchten.

org.apache.lucene.analysis.TokenStream.incrementToken() 

Diese Methode gibt einen booleschen Wert zurück. Sie können ein Beispiel here sehen.

Ein andere mögliche Lösung ist es, eine copyField zu verwenden firstName_phonetic und firstName_ngram in Vornamen und hl.fl = Vornamen für die Antwort

1

Es klingt vernünftig nur copyField und Index zwei verschiedene Felder, die jeweils mit einer eigenen Kette.

Aber ich denke, nichts hindert Sie daran, Ihren eigenen MyCustomFilter zu implementieren, der das tut, was Sie brauchen, und Sie stecken diesen in Ihr Conf.

+0

Dank verwenden zu kombinieren. Mein Hauptgrund dafür ist, die Hervorhebung des Feldes beizubehalten (ich füge das zu meiner Frage hinzu). Ich habe es nicht ausprobiert, aber ich nehme an, dass, wenn eine Abfrage nur im Kopierfeld übereinstimmt, das ursprüngliche Feld keine Hervorhebung hat. –

Verwandte Themen