Am nadzieję, że ktoś z dość wgląd w wewnętrzne funkcjonowanie Lucene może być w stanie wskazać mi w dobrym kierunku =)TermQuery nie wraca na znanej wyszukiwania wyrażenia, ale WildcardQuery robi
Pominę większość otaczający nieodpowiedzialny kod i przeciąć prawo do pościgu. Mam indeks Lucene, do której dodaję następujące pola do indeksu (zmienne zastąpione przez ich wartości dosłowne):
document.Add(new Field("Typenummer", "E5CEB501A244410EB1FFC4761F79E7B7",
Field.Store.YES , Field.Index.UN_TOKENIZED));
Później, kiedy szukać mojego indeksu (przy użyciu innych typów kwerend), jestem w stanie zweryfikować, że to pole rzeczywiście pojawiają się w moim indeksie - jak wtedy, gdy zapętlenie poprzez wszystkie pola zwróconych przez Document.GetFields()
Field: Typenummer, Value: E5CEB501A244410EB1FFC4761F79E7B7
tej pory tak dobrze :-)
teraz prawdziwym problemem jest - dlaczego nie mogę użyć TermQuery, aby przeszukać tę wartość i faktycznie uzyskać resu lt.
Ten kod daje 0 klikniecia:
// Returns 0 hits
bq.Add(new TermQuery(new Term("Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7")), BooleanClause.Occur.MUST);
Ale jeśli mogę zmienić to do WildcardQuery (bez symboli wieloznacznych), otrzymuję 1 hit spodziewam.
// returns the 1 hit I expect
bq.Add(new WildcardQuery(new Term("Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7")), BooleanClause.Occur.MUST);
Sprawdziłem długości pól, mam zaznaczone, że używam tego samego analizatora i tak dalej i wciąż jestem na placu 1, dlaczego to jest.
Czy ktoś może wskazać mi kierunek, w którym powinienem patrzeć?
Nie jestem zbyt obeznany z Lucene.net, ale w przypadku, gdy używa on tej samej struktury indeksu co wersja Java, możesz użyć Luke http://code.google.com/p/luke/, aby sprawdzić, czy twój indeks Struktura spełnia Twoje oczekiwania.Alternatywnie, czy mógłbyś sprawdzić, czy TermsIndex # seekExact udaje się znaleźć Twój termin? – jpountz