Динамические поля в Solr
-
23-08-2019 - |
Вопрос
В моем текущем проекте мне нужно проиндексировать все электронные письма и их вложения из нескольких почтовых ящиков.
Я буду использовать Solr, но я не знаю, каков наилучший подход к построению структуры моего индекса.Мой первый подход был:
<fields>
<field name="id" require="true"/>
<field name="uid" require="true"/>
//A lot of other fields
<dynamicField name="attachmentName_*" require="false">
<dynamicField name="attachmentBody_*" require="false">
</fields>
Но сейчас я не совсем уверен, что это лучшая структура.Я не думаю, что смогу выполнить поиск по одному термину (например переполнение стека) и знать, где был этот термин (например Прикрепленное тело_1 или _2 или _3 и т.д.) с помощью одного запроса.
У кого-нибудь есть лучшее предложение по структуре моего индекса?
Решение 2
Я нашел одно возможное решение.Все, что мне нужно сделать, это установить attachmentBody как сохраненный.
Это решение недостаточно хорошо, потому что пространство индекса резко увеличится, но в моем случае проблем нет, потому что я тоже реализую функцию выделения, и эти поля необходимо сохранить.
Другие советы
Вы можете использовать многозначные поля для attachmentName и attachmentBody.Таким образом, у вас было бы 2 обычных поля вместо динамических полей.Затем вы можете использовать выделение, чтобы вернуть конкретные значения, которые соответствуют окружающему контексту.
Другим вариантом было бы сделать каждое вложение отдельным документом и сохранить что-то, чтобы определить, к какому электронному письму оно принадлежит.Недостатком такого подхода является то, что вам может потребоваться несколько раз проиндексировать любые данные из самого электронного письма.Но на самом деле это проблема только в том случае, если большинство сообщений электронной почты имеют более одного вложения.