2016-12-15 2 views
0

У меня есть репозиторий, где у меня есть учения, которые могут содержать 0..n devotionals, который хорошо работает для отображения сводной информации в моих объявлениях. У меня есть одно поле, в котором суммируется количество связанных с этим преданностей. Проблема в том, что я хочу предоставить сводку граней рядом с листингом, чтобы позволить моим пользователям ограничивать список учений только теми, у кого есть связанные преданности.Как вы ведите диапазоны данных в ElasticSearch?

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

Мой запрос выглядит следующим образом:

{ 
    "size": 3, 
    "sort": [ { "endDate": { "order": "desc" } } ], 
    "aggs": { 
    "teachers": { 
     "terms": { "field": "teachings.teacher.id" } 
    }, 
    "audio": { 
     "terms": { "field": "teachings.hasAudio" } 
    }, 
    "transcript": { 
     "terms": { "field": "teachings.hasTranscript" } 
    }, 
    "landmark": { 
     "terms": { "field": "isLandmark" } 
    }, 
    "devotionals": { 
     "terms": { "field": "teachings.numberOfDevotionals" } 
    } 
    } 
} 

Остальные агрегатах очень многое сделать то, что я хочу. Я могу получить список учителей и истинные/ложные ведра для других предметов. Часть, которую мне не устраивает, - это статья "devotionals" в скоплениях. Поскольку поле является подсчетом, а не логическим, у меня может быть довольно много ведер с агрегацией terms, и я просто хочу знать, есть ли у преподавателя любые devotionals или нет.

Как я могу получить количество документов для того, имеет ли учение преданное? Я просматривал документацию, и гистограммы не совсем соответствовали моей потребности, так как требуемые ведра - «0» и «1 или больше», а не интервалы с интервалом.

+0

Не могли бы вы подробнее рассказать о _ «Я обнаружил, что если мои агрегирования перечислены перед моим запросом, то запрос полностью игнорируется». _? –

+0

У меня было предложение запроса, которое ограничивало учебные документы теми, у кого был список совпадающих терминов (т. Е. Роли людей, которых можно было увидеть), а также ограничение учителя. Когда раздел запроса был последним в списке, как мои результаты, так и агрегаты вели себя так, как будто не было раздела запроса. Когда я помещаю раздел запроса перед агрегатами, тогда ограничения применяются к обоим. Это было удивительно для меня. –

+0

Не могли бы вы представить проблему на https://github.com/elastic/elasticsearch-net/issues с примером? –

ответ

0

На данный момент у меня нет ответа на вопрос, который я задал с помощью ElasticSearch. Тем не менее, у меня есть следующий метод вычисления результата я хочу от ответа:

TermsAggregate hasDevotional = searchResponse.Aggs.Terms("devotionals"); 
int numDevotionals = (int)hasDevotional.Buckets 
     .Where(b => float.Parse(b.Key) > 0) 
     .Sum(b => b.DocCount); 

Несколько примечаний:

  • ведра ключевых имен для числовых полей всегда плавают («0,0» , «1,0»)
  • DocCount свойство является long

Это решение не очень, и мне очень хотелось, чтобы иметь возможность подсчет всех г где поле "teachings.numberOfDevotionals" было больше 0 наряду с фактическими результатами поиска.