Lucene8:Facetの使い方サンプル、その2



int, longの場合はfacet用ディレクトリは不要のようだ。そして、intもlongもlongとして扱われるらしい(そもそもlongしか無い?)。


import static java.util.stream.Collectors.*; import static org.junit.Assert.*; import java.util.stream.*; import org.apache.lucene.document.*; import org.apache.lucene.facet.*; import org.apache.lucene.index.*; import org.apache.lucene.search.*; import org.apache.lucene.store.*; import org.junit.*; public class FacetTest2 { @Test public void test() throws Exception { Directory dir = new RAMDirectory(); try (IndexWriter indexWriter = new IndexWriter(dir, new IndexWriterConfig())) { for (int i = 0; i < 10; i++) { Document doc = new Document(); doc.add(new NumericDocValuesField("id", 1)); indexWriter.addDocument(doc); } for (int i = 0; i < 5; i++) { Document doc = new Document(); doc.add(new NumericDocValuesField("id", 2)); indexWriter.addDocument(doc); } } try (IndexReader indexReader = DirectoryReader.open(dir)) { IndexSearcher indexSearcher = new IndexSearcher(indexReader); FacetsCollector fc = new FacetsCollector(); FacetsCollector.search(indexSearcher, new MatchAllDocsQuery(), Integer.MAX_VALUE, fc); LongValueFacetCounts longCounts = new LongValueFacetCounts("id", fc, false); FacetResult result = longCounts.getAllChildrenSortByValue(); String s = IntStream.range(0, result.childCount) .mapToObj(i->result.labelValues[i]) .map(lv->lv.label + "=" + lv.value) .sorted() .collect(joining(",")); assertEquals("1=10,2=5", s); } } }