Эффективно сортировка и подкачка страниц с Solr, когда индекс изменяется

Я работаю над структурированным средством просмотра документов, где каждый документ Solr является "разделом" или "абзацем" в большом наборе легальных документов, наряду с различными метаданными. У меня есть корпус, который, вероятно, представит 10^12 или больше этих разделов. Я хочу предоставить подкачку страниц пользователю так, чтобы они могли просмотреть N этих разделов за один раз в sort_path порядок.


Теперь проблема: Даже если sort_path индексируется, существуют документы, добавляемые и удаленные все время. Простой вид и решение для подкачки страниц закончатся с пользователями, возможно пропускающими разделы или переходящими вокруг в упорядочивании неожиданно, даже когда они нигде не около документа того, чтобы быть, добавил/удалил в упорядочивании; это поведение было бы недопустимо.

Пример: Я высказываю "следующее" мнение ссылки страницы в чем-то как ...sort_order=sort_path+desc&rows=N&start:12345. Затем в то время как пользователь просматривает страницу, документ рано в порядке sort_path удален. Теперь, когда они выбирают следующие строки N, они пропустят 1 документ без знания.

Так, учитывая у меня есть a sort_path поле, которое заказывает разделы, фронтэнд, должно смочь попросить разделы N "прежде" или "после" sort_path:/X/Y/Z, вместо того, чтобы просить rows:N с start:12345. Я понятия не имею, как представить это в запросе Solr.


Я могу продвигать края Solr немного далеко, и он может закончить тем, что имел больше смысла хранить представления этих документов "раздела" оба в Solr (для довольного поиски, которые Solr является потрясающим в), и RDBMS (для упорядочивания и индексации). Я надеялся избежать, чтобы, и этот вид запроса все еще был ужасным в базе данных, поэтому возможно, Вы получили некоторое представление. (Спасибо!)


Обновление:

Оказывается, что диапазоны solr, объединенные с сортировкой, могут дать мне точно, в чем я нуждаюсь. На индексируемом поле я могу сделать что-то как

sort_path:["/A/B/C" TO *]

получить "следующие" разделы N и сделать

sort_path:[* TO "/A/B/C"]

упорядочивание sort_path:desc и затем инвертируя возвращенный блок для получения предыдущих разделов N. Я собираюсь проверить производительность этого решения, но это кажется жизнеспособным.

1
задан Dan Fitch 6 July 2010 в 20:16
поделиться

1 ответ

Это не совсем специфическая проблема Solr, а общая проблема с пагинацией любого внешнего источника данных, потому что источник данных имеет независимое состояние от (веб-) приложения. Например, это также происходит в реляционных базах данных. Вот хорошее освещение проблемы пагинации в реляционных базах данных, а также возможные решения. Большинство веб-приложений / веб-сайтов используют первое решение: "Повторять запрос для каждого нового запроса", поскольку другие решения намного сложнее и не масштабируются, но это страдает от описанной вами проблемы. Просмотрите вопросы на stackoverflow.com некоторое время, и вы заметите это, поскольку вопросы создаются постоянно.

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

Другим вариантом может быть уменьшение скорости фиксации, но это может привести к менее чем идеальной свежести документа.

2
ответ дан 2 September 2019 в 23:15
поделиться
Другие вопросы по тегам:

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