размер запроса lucene - это масштаб?запрос для '1 ИЛИ 2 ИЛИ 3 .. ИЛИ N' - PullRequest
4 голосов
/ 24 августа 2010

Предположим, у меня есть запрос lucene 'id1 ИЛИ id2 ИЛИ id3 ... idN'.Насколько хорошо это масштабируется при увеличении N?

Ситуация, на которую я смотрю, будет похожа на кого-то, кто выполняет текстовый поиск по товарам в своей корзине, но у них может быть сотни или тысячи товаров в корзине.,Пользователь хочет сделать текстовый поиск по всем продуктам в своей корзине.Могу ли я выполнить текстовый запрос ко всем доступным продуктам, а затем ограничить количество товаров, возвращенных с помощью предложения ИЛИ идентификаторов продуктов в их корзине?

Ответы [ 5 ]

4 голосов
/ 24 августа 2010

Максимальное количество предложений в логическом запросе по умолчанию равно 1024.Вы можете увеличить этот лимит.Там будет снижение производительности, хотя.Я полагаю, было бы эффективно, если бы вместо этого вы использовали фильтры.

2 голосов
/ 25 августа 2010

Как уже отвечали некоторые люди, существуют практические ограничения.Однако, если вы интересуетесь теорией, на самом деле нет никакой разницы между набором терминов OR с одним термином с множеством возможных результатов.Если p - это количество публикаций (пар терминов / документов), которые соответствуют вашему запросу, и вы хотите найти k лучших совпадений, запрос будет выполнен в O (p log k).См. Статью Дуга Оптимизация пространства для общего рейтинга .

Если у вас есть q условий запроса OR вместе и t терминов в итоговом индексе, на самом деле это будет что-то вроде O (q log t+ p log k), но для большинства приложений p log k будет доминировать над этим.(Эта формула была основана на том факте, что для поиска потока публикации требуется время регистрации, и вы должны делать это один раз в течение каждого запроса).

1 голос
/ 24 августа 2010

Использование FilteredQuery во время поиска.Его конструктор принимает запрос и фильтр.Создайте запрос из того, что вводит пользователь (посмотрите на QueryParser ).Создайте фильтр из списка идентификаторов продуктов (посмотрите TermsFilter ).

1 голос
/ 24 августа 2010

Как @Shashikant Kore упоминает, что по умолчанию ограничение составляет 1024.

Если у вас очень большая коллекция текста, вы можете посмотреть на реализацию MoreLikeThis - она ​​использует некоторыеаккуратная эвристика для создания репрезентативного запроса из имеющегося у вас контента.

0 голосов
/ 24 августа 2010

Существует ограничение на количество логических выражений в вашем запросе.

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