Solr: запрос фасет и отсчет отсутствует - PullRequest
0 голосов
/ 24 января 2019

В моем индексе Solr у меня есть необязательное поле даты.Давайте назовем это Property_3_1044.

Я хочу найти максимум и минимум из Property_3_1044, а также количество всех элементов безэта дата .

Я считаю, что огранка - лучший подход.Пожалуйста, исправьте меня, если есть лучший способ!


Использование Фасет запроса Я могу использовать агрегатные функции min и max для получения минимума и максимума соответственно:

http://localhost:8983/solr/Shard/query?q=:&json.facet={Date1:{type:query,facet:{"min":"min(Property_3_1044)","max":"max(Property_3_1044)"}}}&rows=0

Результат:

"facets":{
  "count":249,
  "Date1":{
    "count":249,
    "min":"2019-01-09T00:00:00Z",
    "max":"2019-01-22T00:00:00Z"}}}

(Вопрос в стороне: как избавиться от 2 count с?)


Использование Терминов-граней Я могу использовать параметр missing, чтобы найти все элементы без даты :

http://localhost:8983/solr/Shard/query?q=:&rows=0&json.facet={Date2:{terms:{field:Property_3_1044,missing:true,limit:0}}}

Результат:

"facets":{
  "count":249,
  "Date2":{
    "buckets":[],
    "missing":{
      "count":240}}}}

Как мне объединить эти два запроса?Я знаю, что могу просто выполнить оба (просто объединяя строки двух запросов), но я хотел бы знать, есть ли более эффективный способ.Я предполагаю, что выполнение как фасета запроса, так и фасета терминов обходится дороже, чем просто использование одного фасета.Например, агрегатная функция missing позволила бы мне делать все, просто используя фасет запроса (но такого метода нет, не так ли?).

1 Ответ

0 голосов
/ 25 января 2019

Я нашел решение сам; Мне просто нужно добавить фасетный запрос q, который фильтрует ненулевые значения -> [* TO *]:

http://localhost:8983/solr/Shard/query?q=:&json.facet={Date1:{type:query,q:"Property_3_1044:[* TO *] ", фасет: {" min ":" min (Property_3_1044) "," max ":" max (Property_3_1044) "}}} & rows = 0

В результате внешний счетчик является числом всех элементов (здесь: 225), а внутренний счетчик фасетов даст количество элементов с установленной датой, т.е. после применения q (здесь: 9):

"facets":{
  "count":225,
  "Date1":{
    "count":9,
    "min":"2019-01-09T00:00:00Z",
    "max":"2019-01-22T00:00:00Z"}}}

Количество элементов без Дата - это разница (225-9 = 216).

...