Динамические ограничения фасетов с использованием Solr - PullRequest
0 голосов
/ 25 октября 2019

Как сгруппировать результаты моего запроса Solr, используя числовое поле, в x сегментов, где начальные и конечные значения сегмента определяются при выполнении запроса?

Например, если я хочу сосчитать и сгруппироватьдокументы в 5 блоков по полю wordCount, результаты должны быть:


250-500 слов: 3438 результатов
500-750 слов: 4554 результатов
750-1000 слов: 9854 результатов
1000-1250 слов: 3439 результатов
1250-1500 слов: 38 результатов

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

Мой текущий запрос (который не работает):

curl http://localhost:8983/solr/pages/query -d '
q=*:*&
rows=0&
json.facet={
  wordCount : {
    type: range,
    field : wordCount,
    start : max(wordCount),
    end : min(wordCount),
    gap : 1000
  }
}'

Я прочитал этот вопрос , который предлагает вычислять сегменты в коде приложения перед отправкой их в Solr для подсчета. Это не идеально, поскольку требует многократных запросов к базе данных, а также ответ устарел на несколько лет, и с тех пор Solr добавил API-интерфейс граней JSON, который допускает более сложные параметры фасетирования.

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

...