Próbuję zaimplementować indeks dokumentów (z grubsza odpowiadający wierszom DB), gdzie jedno z pól jest liczbą całkowitą. Dodaję je do indeksu jak:Jak przeszukiwać pole int w Lucene 4?
Document doc = new Document();
doc.add(new StringField("ticket_number", rs.getString("ticket_number"),
Field.Store.YES));
doc.add(new IntField("ticket_id", rs.getInt("ticket_id"),
Field.Store.YES));
doc.add(new StringField("id_s", rs.getString("ticket_id"),
Field.Store.YES));
w.addDocument(doc);
Wydaje się, że nie może zapytać pole ticket_id
w ogóle, podczas gdy id_s
działa dobrze.
Jeden z dokumentów to (I dodaje spacje dla czytelności):
Document<
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<ticket_number:230114W>
stored<ticket_id:152>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<id_s:152>>
Więc moja int pole jest przechowywany, ale nie indeksowane. Ta kwerenda działa zgodnie z oczekiwaniami: id_s:152
, podczas gdy ta nigdy nie zwraca niczego: ticket_id:152
.
Co robię źle? Jak mogę dodać takie pole do indeksu i umożliwić jego wyszukiwanie?
Dzięki stary, ten bardzo mi pomógł. – SoluableNonagon
Czy "234" wskazuje ten sam fragment danych, jeśli tak, nie sądzę, że ma prawo przechowywać go w indeksie dwa razy, raz jako ciąg i raz jako int. –
'234' jest przechowywany z różnymi polami (' ticket_id' i 'id_s'). Nie widzę w tym nic złego. Koncepcyjnie może to być błędne, ale celem tego przykładu jest tylko udowodnienie, że obie techniki są możliwe. – mindas