Я использую прямой Lucene (без Solr или ElasticSearch) для индексации набора документов, которые следуют иерархии родитель-потомок.
Я использую «блоки» для достижения этой цели путем добавления всех потомков, за которыми следует родитель, в один и тот же блок, вызывая:
writer.addDocuments(childrenAndParentDocList)
Я выполняю свободный текстовый поиск по всем родителям и дочерним элементам (используя ToParentBlockJoinQuery в дочернем поиске для связи с родительскими документами), который возвращает хороший набор родительских документов, которые либо соответствуют запросу, либо имеют дочерний элемент, соответствующий запросу.
Следующее, что мне нужно сделать, это выбрать всех детей для всех родительских документов, которые у меня есть.
Я видел метод в тесте lucene здесь , который показывает, как получить родительский документ с учетом дочернего документа.
private Document getParentDoc(IndexReader reader, BitSetProducer parents, int childDocID) throws IOException {
final List<LeafReaderContext> leaves = reader.leaves();
final int subIndex = ReaderUtil.subIndex(childDocID, leaves);
final LeafReaderContext leaf = leaves.get(subIndex);
final BitSet bits = parents.getBitSet(leaf);
return leaf.reader().document(bits.nextSetBit(childDocID - leaf.docBase));
}
Но я не уверен, как поступить наоборот. то есть как получить всех детей по родительскому документу.
Любой совет будет оценен.