How to sort IntPont or LongPoint field in Lucene 6

2019-04-03 02:15发布

Hi: I am migrating to Lucene 6 from Lucene 5.1. I found out that InPoint does not support sorting as its DocValuesType is frozen to NONE and sorting requires NUMERIC. In Lucene 5.1, I could set the field type of a newmeric field so I could do range based search and sort the result. I know I can migrate to LegacyIntField but I'd like migrate to the new IntPoint instead. Does any one know how to index a numeric value to support both range based query and sorting?

Thank you!

标签: lucene
2条回答
我想做一个坏孩纸
2楼-- · 2019-04-03 02:23

You need to store the value in a NumericDocValuesField or its subclasses. doc.add(new NumericDocValuesField(field, 10));

Then search docs ranked by this field will be :

Sort sort = new Sort(new SortedNumericSortField(field, SortField.Type.INT, true)); TopDocs topDocs = indexsearcher.search(query, returnedDocNum, sort);

查看更多
Animai°情兽
3楼-- · 2019-04-03 02:32

You have to use additional SortedNumericDocValuesField

document.add(new SortedNumericDocValuesField("bid_sorter", bid));

and make sort based on it

searcher.search(query, hitsPerPage, new Sort(new SortField("bid_sorter", SortField.Type.SCORE, true)))
查看更多
登录 后发表回答