Каковы ограничения булевых запросов в Lucene? - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть требование найти элементы в индексе Lucene, которые имеют два основных критерия: 1. соответствовать определенной строке, называемой «отношением» 2. попасть в список разрешений «группы грантов»

AnГруппа разрешений определяет подмножество элементов, доступных для члена этой группы, и очень похожа на роль авторизации.

Все документы в индексе Lucene имеют поле 'отношение' и, для простоты, один или несколько 'поля grant-group '.

Так, например, пользователь может искать' foobar ', и этот пользователь может быть членом групп a, b, c.Например, foobar имеет группы грантов a, p, q, s

Запрос будет, в основном, "соответствовать" foobar 'AND (a OR b OR c).

Это должноработать в соответствии с документацией Lucene.

У меня такой вопрос: как далеко вы можете пойти со 2-й частью логического запроса, а именно с частью после «И»? Причина, по которой я спрашиваю, такова:Чтобы провести небольшое технико-экономическое обоснование, и частью требований является необходимость поддержки потенциально МНОГО групп в разделе «ИЛИ». Возможно до 200 или 300 групп.

Будет ли заметное снижение производительности?

спасибо.

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

Вы должны измерить, что бы вы ни делали.Я думаю, что вы, вероятно, должны быть в порядке с 200-300 группами.Я думаю, что ограничение по умолчанию для предложений в BooleanQuery составляет 1024, но это также можно изменить.

Если вы используете Solr, а не прямой Lucene, то я бы рекомендовал поместить часть группы предоставления в качестве filterQuery , чтобы его можно было кэшировать.

1 голос
/ 21 декабря 2010

Из этого обзора производительности люцена :

Другими словами: для стандартных дизъюнктивных (OR) запросов количество предложений не влияет на производительность, за исключением случаев, когда большее количество документов является потенциальным совпадением.

Как упоминал Ави, вы достигнете предела в 1024 пункта.

0 голосов
/ 21 декабря 2010

Я не уверен, сколько элементов вы можете указать в OR, возможно, вам следует сделать простое подтверждение концепции, просто чтобы посмотреть, как она работает.

Кроме этого, если вы используете Solr, я быне изменять исходный запрос для реализации ваших требований (это повлияет на оценку для сопоставленных документов), а использовать параметр 'fq' (см. Фильтр запроса ):

...