Solr объединяет результаты двух ядер только в те результаты, которые имеют совпадающее поле - PullRequest
2 голосов
/ 14 октября 2010

Я пытаюсь выяснить, насколько мне удается выполнить следующее, и ни один из ответов, которые я нашел до сих пор, не подходит:

У меня достаточно статичный и большой набор ресурсов, которые мне нужныпроиндексированы и доступны для поиска.Solr, кажется, идеально подходит для этого.Кроме того, мне нужно, чтобы мои пользователи могли добавлять ресурсы из основного набора данных в папку «Избранное» (которая может включать еще несколько добавленных ими тегов).Избранное должно быть доступно для поиска таким же образом, как и основной набор данных, по всем тем же полям плюс дополнительные поля.

Моей первой мыслью было создание двух отдельных схем - первой для основного набора данных и его метаданных - второй для папки «Избранное», в которой были скопированы все метаданные из основного набора и затем добавлены дополнительные поля..

Тогда я подумал, что это, вероятно, потратило бы довольно много места (количество пользователей намного больше, чем количество основных ресурсов).

Итак, я подумал, что могу иметь основнойнабор данных с его метаданными (Core0), такой же, как и выше, с resourceId в качестве уникального идентификатора.Затем будет второй (Core1) для папки «Избранное» с уникальным идентификатором resourceId, userId, grade, folder, которые будут все конфискованы.ResourceId также будет отдельным полем.Кроме того, я бы создал другую схему / ядро ​​(Core3) со всеми полями из двух других и определил для него обработчик запросов, который выполняет поиск по двум другим ядрам и возвращает результаты через это ядро.

Это третье ядро ​​будет выполнять поиск по нему, результаты которого будут возвращены только для одного пользователя.Например, пользователь ищет в своей папке «Избранное» все элементы с помощью Foo.В результате получаются только те элементы, которые пользователь добавил в избранное с помощью Foo где-то в своих основных метаданных набора данных.Я предполагаю, что обработчик результатов из Core3 разбил бы поиск на поиск всех документов с Foo в Core0, поиск по Core1 для идентификатора пользователя и папки, а затем сопоставил бы идентификаторы ресурсов из обоих из них и исключил бы те, которые не в обоих.Или выполните поиск в Core1 с помощью userId и папки, а затем, вернув этот набор результатов, извлеките все resourceIds и добавьте AND к поисковому запросу в Core0, например: AND (resourceId = 1232232312 OR resourceId = 838388383 OR resourceId = 8637626491).

Можно ли заставить это работать?Или есть какой-то более простой механизм, позволяющий Solr разрешить объединение двух поисков по двум ядрам и возвращать результаты, которые совпадают в (не обязательно уникальном) поле в обоих?

Спасибо.

1 Ответ

0 голосов
/ 15 октября 2010

Проблема выглядит как объединение базы данных из 2 таблиц с идентификатором ресурса в качестве внешнего ключа. Проигнорируйте сообщение, если то, что я понял, неправильно.

Сначала я, вероятно, сделаю это с одним ядром, с полем ИД пользователя (проиндексированным, но не сохраненным), переиндексирую документ каждый раз, когда новый пользователь добавляет его в избранное, добавляя свой идентификатор пользователя (ограниченный чем-то, что анализатор игнорирует). Таким образом, поиск становится проще (userId: "kaka's id" выберет все мои любимые) Я думаю, что для этого требуется определенная работа, а также, если количество пользователей, которым может понравиться документ, увеличивается, поле идентификатора пользователя становится действительно длинным.

Так что в этом случае я перейду к своей следующей идее, которая похожа на вашу, у меня будет второе ядро ​​с (userid, resource id). Напишите оболочку, которая сначала ищет в этом ядре все избранное, а затем ищет другое ядро для всех ресурсов в условии where, но опять же ... если пользователь добавляет больше ресурсов, запрос может превысить ограничение размера метода GET.

Если оба варианта не работают, пришло время подумать о чем-то более масштабируемом, что оставляет нам один и тот же вариант потери пространства.

Я что-то упустил ??

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