Ich hoffe, dass jemand mit genügend Einblick in das Innenleben von Lucene in der Lage sein könnte, mich in die richtige Richtung zu weisen =)
Ich werde die meisten der umliegenden irellevant Code überspringen, und schneiden Sie direkt auf den Punkt. Ich habe einen Lucene-Index, zu dem ich das folgende Feld zum Index hinzufüge (Variablen durch ihre literalen Werte ersetzt):
document.Add( new Field("Typenummer", "E5CEB501A244410EB1FFC4761F79E7B7",
Field.Store.YES , Field.Index.UN_TOKENIZED));
Wenn ich später meinen Index durchsuche (unter Verwendung anderer Abfragetypen), kann ich überprüfen, ob dieses Feld tatsächlich in meinem Index enthalten ist, z. B. wenn ich eine Schleife durch alle von Document.GetFields() zurückgegebenen Felder ziehe
Field: Typenummer, Value: E5CEB501A244410EB1FFC4761F79E7B7
So weit, so gut :-)
Das eigentliche Problem ist nun, warum kann ich nicht eine TermQuery verwenden, um nach diesem Wert zu suchen und tatsächlich ein Ergebnis zu erhalten.
Dieser Code ergibt 0 Treffer:
// Returns 0 hits
bq.Add( new TermQuery( new Term( "Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7" ) ), BooleanClause.Occur.MUST );
Aber wenn ich dies auf eine WildcardQuery (ohne Platzhalter) umstelle, erhalte ich den 1 Treffer, den ich erwarte.
// returns the 1 hit I expect
bq.Add( new WildcardQuery( new Term( "Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7" ) ), BooleanClause.Occur.MUST );
Ich habe die Feldlängen überprüft, ich habe überprüft, dass ich denselben Analyzer verwende und so weiter, und ich stehe immer noch auf Platz 1, warum das so ist.
Kann mir jemand einen Tipp geben, wo ich suchen sollte?