Я пытаюсь выяснить, насколько мне удается выполнить следующее, и ни один из ответов, которые я нашел до сих пор, не подходит:
У меня достаточно статичный и большой набор ресурсов, которые мне нужныпроиндексированы и доступны для поиска.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 разрешить объединение двух поисков по двум ядрам и возвращать результаты, которые совпадают в (не обязательно уникальном) поле в обоих?
Спасибо.