I added a field in Lucene which is multi-valued as such:
String categoriesForItem = getCategories(); // returns "category1, category2, cat3" from a DB call
String [] categoriesForItems = categoriesForItem.split(",";
for(String cat : categoriesForItems) {
doc.add(new StringField("categories", cat , Field.Store.YES)); // doc is a Document
}
later when I am searching for items in a category everything works as expected, but when I get a Document and do:
String categories= doc.getField("categories").stringValue();
I only get the last inserted value for that document rather than all the values that were added for that document.
How can I get all the values which were added for that document?
What you are adding to the document is not multi-valued single field, but multiple fields with the same name. At the end you are only retrieving one field.
Use public final List<IndexableField> getFields()
of Document
instead.
Use doc.getValues("categories")
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With