2016-06-23 9 views
1

Ich habe Probleme mit Solr Wildcard-Suche und Stoppwörter. Ich habe in stoppwords.txt einige Stoppwörter "zu", "für", "ist" hinzugefügt. Wenn ich keine Wildcard-Suche mache, funktioniert es perfekt.
Abfrage ->q=learningObjectTopic:to&rows=1Solr Stoppwörter nicht mit Wildcard-Suche

<response> 
<lst name="responseHeader"> 
<int name="status">0</int> 
<int name="QTime">3</int> 
<lst name="params"> 
<str name="q">learningObjectTopic:to</str> 
<str name="rows">1</str> 
</lst> 
</lst> 
<result name="response" numFound="0" start="0"/> 
</response> 

Wenn ich eine Wildcard seiner Rückkehr Daten suchen.
Abfrage ->q=learningObjectTopic:*to*&rows=1

<response> 
<lst name="responseHeader"> 
<int name="status">0</int> 
<int name="QTime">5</int> 
<lst name="params"> 
<str name="q">learningObjectTopic:*to*</str> 
<str name="rows">1</str> 
</lst> 
</lst> 
<result name="response" numFound="75" start="0"> 
<doc> 
<str name="id">56f4bc54b2de79277297dcab</str> 
<str name="learningObjectId">LO1_SK1_18</str> 
<str name="learningObjectTopic">Introduction to Web Development</str> 
<str name="category">learningObject</str> 
<long name="_version_">1537824533459763200</long> 
</doc> 
</result> 
</response> 

Das ist mein Analysator

ist
<fieldType name="text_general" class="solr.TextField" multiValued="false" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

Was ich suche ist, "zu" sollten in der Wildcard-Abfrage auch nicht überein. Was fehlt mir hier?

Hinweis: learningObjectTopic: um übersprungene "to" -Werte in Ergebnissen zu suchen, wenn ich in Stopwörtern "to" hinzugefügt habe, funktioniert die Stopword-Indizierung.

+0

Hat das Feld, nach dem Sie suchen, in der Datei schema.xml gespeichert = "true"? Wenn solr die ursprüngliche Zeichenfolge speichert und zurückgibt, müssen Sie den Abfrageanalysator überprüfen, um zu sehen, wie die Stoppwörter verarbeitet werden. –

+0

@EricN Dies ist meine Felddefinition '' –

+0

Haben Sie nach der Änderung der Analysatordefinition eine Neuindizierung durchgeführt? – femtoRgon

Antwort

0

Solr StopFilterFactory ist keine Multi-Term-Aware-Komponente und daher funktioniert stopFilterFactory nicht für Platzhalter-Abfragen. Reference link.

Und auch das Szenario kann nicht gültig sein. da, wenn ein Schlüsselwort "Tokyo" im Index vorhanden ist, das Suchschlüsselwort "to *" dieses Ergebnis zurückgeben sollte, anstatt "0" Ergebnis anzuzeigen, was nicht korrekt ist.

+0

.. aber da das Stoppwort _when indexing_ entfernt wird, sollte der Abfrageteil nicht übereinstimmen, wenn kein Token vorhanden ist, das zu * * im Index passt? – MatsLindh