Динамические поля в Solr - PullRequest
0 голосов
/ 03 апреля 2009

В моем текущем проекте мне нужно проиндексировать все электронные письма и их вложения из нескольких почтовых ящиков.

Я буду использовать 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>

Но сейчас я не совсем уверен, что это лучшая структура. Я не думаю, что могу искать один термин (например, stackoverflow ) и знать, где этот термин был (например, attachmentBody_1 или _2 или _3 и т. Д.) Одним запросом.

У кого-нибудь есть лучшее предложение для структуры моего индекса?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2009

Вы можете использовать многозначные поля для attachmentName и attachmentBody. Таким образом, у вас будет 2 обычных поля вместо динамических полей. Затем вы можете использовать выделение, чтобы вернуть определенные значения, которые соответствуют окружающему контексту.

Другой вариант - сделать каждое вложение отдельным документом и сохранить что-либо, чтобы определить, к какому электронному письму оно принадлежит. Недостатком этого подхода является то, что вам может понадобиться проиндексировать любые данные из самой электронной почты несколько раз. Но это действительно проблема, только если большинство сообщений электронной почты имеют более одного вложения.

0 голосов
/ 03 апреля 2009

Я нашел одно возможное решение. Все, что мне нужно сделать, это установить attachmentBody как сохраненное.

Это решение недостаточно хорошо, потому что пространство индекса будет резко увеличиваться, но в моем случае проблем не возникает, потому что я также буду реализовывать функцию выделения, и эти поля необходимо сохранить.

...