Использует ли Solr Faceting дополнительное пространство?если так, как избежать огранки в solr для определенных полей? - PullRequest
0 голосов
/ 21 мая 2018

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

Если у меня есть документ ниже json:

{
...

"name":"john"
"department":"IT"
"salary":10000 
...

}

Я хочу выполнить фасетный поиск по 2 полям отдел и зарплата.

Так что, в случае отдела, я предполагаю, что созданный инвертированный индекс / карта может вернуть мне список документов для заданного слова фасета, и никакое дополнительное пространство не используется для отображения информации фасета.Это предположение верно?или solr использует дополнительное пространство для поддержки фасетов?

Правильно ли, что для фасетов на основе диапазона в поле зарплаты создается дополнительная структура данных, в то время как solr индексирует документ для поддержки запросов на основе диапазона?

ЕслиSolr использует дополнительное пространство для поддержки фасетов. Могу ли я отключить его для определенных полей, которые я хочу проиндексировать, но не хочу выполнять поиск фасетов по ним, например, как мы даем "indexed=true"?Один из моих друзей сказал, что в Oracle endeca есть эта функция, где мы можем настроить, чтобы отключить / включить поддержку фасетов для поля. Итак, что-то подобное мне нужно в solr, если существует.

1 Ответ

0 голосов
/ 21 мая 2018

В общем - Solr обычно использует фасеты в индексированных полях, а не в сохраненных.

Существует 3 алгоритма, которые Solr может использовать для обычного гранения :

  • enum Перечисляет все термины в поле, вычисляя пересечение множества документов, соответствующих термину, с документами, соответствующими запросу.

  • fc Рассчитывает количество фасетов, просматривая документы, соответствующие запросу, и суммируя термины, встречающиеся в каждом документе.

  • fcs Per-сегментирование поля сегмента для однозначных строковых полей.

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

  • filter Этот метод генерирует диапазоны на основе других параметров facet.range и для каждого из них выполняетфильтр, который позже пересекается с основным набором результатов запроса, чтобы получить счетчик.
  • dv Этот метод выполняет итерацию документов, соответствующих основному запросу, и для каждого из них находит правильный диапазон дляЗначение.Этот метод будет использовать docValues ​​(если он включен для поля) или fieldCache.

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

Кроме того, это означает, что если docValues="true" для поля, то DocValues ​​будет автоматически использоваться всякий раз, когда поле используется для сортировки, огранки или функциизапросы.

Переходя к последнему вопросу - если вам не нужно выполнять фасетирование или сортировку этого поля, вы можете отключить значения docValues ​​для этого поля (или просто не трогать его, поскольку по умолчанию это false), что в целом сэкономит вам место.

...