Solr меняет оценку документа при изменении значения случайного поля - PullRequest
2 голосов
/ 06 июня 2011

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

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

Проблема, с которой я сталкиваюсь, заключается в том, что когда документ изменяется и переиндексируется для сохранения этих изменений, иногда (и не всегда, что очень тревожно) его место в наборе результатов для тех же изменений запроса (другими словами, это изменение оценки)поскольку этого не происходит при просмотре результатов, отсортированных по одному из полей документа).Таким образом, навигация «Предыдущая» / «Следующая» не работает должным образом.

Я не использую никаких пользовательских весов или бустеров в полях для подсчета очков.Кроме того, это динамическое поле, измененное во время просмотра, не участвует в запросе, используемом для просмотра набора записей.

Итак, возникает вопрос: может ли изменение поля документа, не включенного в запрос, изменить его актуальностьГол?И если это возможно, то как я могу это контролировать?

ОБНОВЛЕНИЕ

Я провел несколько тестов и могу добавить следующее:

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

  2. Это происходит, даже если набор результатов отсортирован явно («имя_символа DESC»), поэтому оценка (которая зависит от даты обновления) не задействована.Документ остается тем же, его набор результатов поля сортируется по тому же самому, но его позиция изменяется.

Все еще не знаю, как этого избежать.

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Я нашел решение, которое не устраняет проблему полностью, но значительно снижает вероятность ее возникновения.

Таким образом, проблема возникает, когда документы сортируются по какому-либо полю, и в этом поле есть ряд из них с одинаковым значением (например, набор результатов сортируется по имени, и для «Джона» имеется 100 записей).

Это когда вовлекается индексированное время - очевидно, Solr использует его для сортировки документов, когда их основные поля сортировки идентичны. Чтобы сделать этот случай намного менее вероятным, вам нужно добавить больше полей сортировки, например, «first_name desc» должно стать «first_name desc, last_name desc, register_date asc».

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

2 голосов
/ 06 июня 2011

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

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

Если вы хотите посмотреть, как рассчитывается рейтинг релевантности, вы можете добавить «debugQuery = on» в конец вашего запроса Solr (см. FAQ по релевантности для получения дополнительной информации).

Однако, несмотря на это, я бы порекомендовал вам кэшировать свой запрос результатов поиска (по крайней мере, для первой страницы результатов), поскольку у вас всегда будут изменения результатов (документы, добавленные, удаленные другими пользователями и т. Д.). Лучше всего разработать интерфейс, который предвидит это или, по крайней мере, объединяет пользовательский запрос.

...