группа Lucene по - PullRequest
       18

группа Lucene по

1 голос
/ 07 сентября 2011

Привет есть индексный простой документ, где у вас есть 2 поля:

1. profileId as long

2. profileAttribute as long.

Мне нужно знать, сколько ID профиля имеет определенный набор атрибутов.

например, я индекс:

doc1: profileId:1 , profileAttribute = 55
doc2: profileId:1 , profileAttribute = 57
doc3: profileId:2 , profileAttribute = 55

и я хочу знать, сколько профилей имеют атрибуты 55 и 57 в этом примере ответом является 1 только потому, что идентификатор профиля 1 имеет оба атрибута

Заранее спасибо за помощь

1 Ответ

2 голосов
/ 07 сентября 2011

Вы можете искать 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...