Как объединить соответствия от двух отличных (не черепок) Индексы Lucene

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

5
задан Rich Seller 16 August 2009 в 21:35
поделиться

3 ответа

Похоже, вам нужно объединить индексы в коде. Если я правильно понимаю, при поиске термина могут быть совпадения либо с текстом документа, либо с тегами, и каждый тег индексируется с соответствующими идентификаторами документов. После этого у вас будет два списка совпадений, которые нужно объединить. Поскольку теги и полный текст - очень разные сущности, вам потребуется некоторое взвешивание (возможно, в виде увеличения поля во время поиска), чтобы достичь хорошего ранжирования. Таким образом, вы можете объединить попадание тега и попадание полного текста для документа k, используя формулу вида:

score (k) = a * tagscore (k) + b * fulltextscore (k)

Где a и b будут эмпирически определенные коэффициенты.

Для более подробного обсуждения см. статьи Гранта Ингерсолла о возможности поиска и , отлаживающие проблемы релевантности в поисковых статьях

.
0
ответ дан 15 December 2019 в 01:07
поделиться

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

Другими словами, Секретарь должен знать, сколько раз термин встречается в документе, а также сколько других документов содержат этот термин. Эта информация сохраняется для каждого термина в индексе, но не для совокупности по нескольким индексам.

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

Как вы понимаете, это победило.

0
ответ дан 15 December 2019 в 01:07
поделиться

В Lucene есть тип IndexReader для поддержки этой схемы - ParallelReader .

Это может быть немного сложно использовать, поскольку идентификатор документа Lucene для записи должен быть одинаковым в обоих индексах. На практике это означает добавление документов в одном и том же порядке в оба индекса. Я читал, что в некоторых случаях удаление документа и оптимизация индекса могут заставить Lucene переназначить эти идентификаторы документов, но я не экспериментировал, чтобы выяснить, правда ли это. При изменении существующих записей может потребоваться дополнительная осторожность. Если добавляются только новые записи, проблем возникнуть не должно.

Этот подход обычно называют «вертикальным разделением», в отличие от «горизонтального разделения» или сегментирования.

4
ответ дан 15 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: