Вы можете искать profileAttribute:(57 OR 55)
, а затем перебирать результаты и помещать их свойство profileId
в набор для подсчета общего количества уникальных profileId
с.
Но вам нужноЗнайте, что Lucene будет плохо работать по сравнению с, скажем, RDBMS.Это связано с тем, что Lucene является инвертированным индексом, что означает, что он очень хорош при получении самых популярных документов, соответствующих запросу.Однако он не очень хорош для итерации по сохраненным полям большого количества документов.
Однако, если profileId
имеет однозначное значение и индексируется, вы можете получить его значения, используя fieldCache Lucene, что помешает вамот выполнения дорогостоящих обращений к диску.Недостатком является то, что этот fieldCache будет использовать много памяти (в зависимости от размера вашего индекса) и будет занимать время для загрузки каждый раз, когда вы (повторно) открываете свой индекс.
Если изменение формата индекса приемлемо, это решение может быть улучшено путем создания уникальных profileId
, ваш индекс будет иметь следующий формат:
doc1: profileId: [1], profileAttribute: [55, 57]
doc2: profileId: [2], profileAttribute: [55]
Разница в том, что profileId
s уникальны, а profileAttribute
теперь мультиценное поле.Чтобы подсчитать количество profileId
s для данного набора profileAttribute
, теперь вам нужно только запросить список profileAttribute
(как ранее) и использовать TotalHitCountCollector .