Вопрос разработки схемы SOLR: отсутствие поля или логическое поле? - PullRequest
2 голосов
/ 29 января 2010

Мне нужно разделить мой индекс SOLR на две половины. Как оказалось, у меня уже есть поле STRING, которое представляет информацию о разделении, которая мне нужна. Это означает, что один вид записи, который будет искать, - это то, где строковое поле присутствует в записи и содержит значение, другой тип - это то, где оно не содержит значения. Все запросы должны указывать раздел для поиска. Теперь мне было бы быстрее искать это поле, используя запрос отрицательного поля, например -strFld:[* TO *], или мне было бы лучше / быстрее создать новое логическое поле, назвать его «hasStrFld» и выполнить поиск по нему? Таким образом, когда strFld отсутствует, hasStrFld имеет значение false. Аналогично, если в StrFld есть данные, тогда hasStrFld имеет значение true.

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

1 Ответ

3 голосов
/ 29 января 2010

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

  • оно уже есть
  • нет такого понятия, как специальное логическое поле ( Solr добавляет это с использованием строкового токена, насколько я понимаю).

Для скорости я бы попробовал:

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

Надеюсь, это поможет.

...