Elasticsearch v 7.5
Привет и хорошего дня!
У меня есть индекс с именем Articles , и он имеет следующий пример содержимого:
{
"_id" : 1,
"title" : "Title 1"
"cms" : [
{
"cli_id" : 0,
"cmx_sentiment" : "Negative"
},
{
"cli_id" : 4599,
"cmx_sentiment" : "Positive"
}
]
},
{
"_id" : 2,
"title" : "Title 2"
"cms" : [
{
"cli_id" : 0,
"cmx_sentiment" : "Positive"
}
]
},
{
"_id" : 3,
"title" : "Title 3"
"cms" : [
{
"cli_id" : 0,
"cmx_sentiment" : "Neutral"
}
]
},
{
"_id" : 4,
"title" : "Title 4"
"cms" : [
{
"cli_id" : 0,
"cmx_sentiment" : "Positive"
},
{
"cli_id" : 12,
"cmx_sentiment" : "Negative"
}
]
}
Я хочу создать ES-запрос с aggs для отображения cms.cmx_sentiment для отчета, но с условием
У меня есть этот скелетный запрос:
GET socialmedia/_search
{
"size" : 1,
"query": {
"match_all": {}
},
"aggs": {
"CMS": {
"nested": {
"path": "cms"
}
}
}
}
это вывод:
"aggregations" : {
"CMS" : {
"doc_count" : 6
}
}
doc_count равно 6, потому что
- артикул 1 имеет 2 cms вложенных элемента
- статья 2 имеет 1 вложенный элемент
- статья 3 имеет 1 вложенный элемент и
- статья 4 имеет 2 вложенных элемента
Теперь я хочу отобразить cms.cmx_sentiment на фильтре для создания отчета НО I необходимо применить условие
УЛУЧШЕНИЕ ЗАПРОСА ВЫШЕ
GET socialmedia/_search
{
"size" : 0,
"query": {
"match_all": {}
},
"aggs": {
"CMS": {
"nested": {
"path": "cms"
},
"aggs": {
"FILTER": {
"filter": {
"bool": {
"must" : [
{
"match" : {
"cms.cli_id" : 0 <--- I need a query to make this dynamic
}
}
]
}
},
"aggs": {
"SENTIMENT": {
"terms": {
"field" : "cms.cmx_sentiment"
}
}
}
}
}
}
}
}
ВЫХОД
"aggregations" : {
"CMS" : {
"doc_count" : 6,
"FILTER" : {
"doc_count" : 1,
"SENTIMENT" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Positive",
"doc_count" : 2
},
{
"key" : "Negative",
"doc_count" : 1
},
{
"key" : "Neutral",
"doc_count" : 1
}
]
}
}
}
}
ЦЕЛЬ
Есть ли способ для меня выступить сценария ES с этим PHP logi c?
- , если cli_id зарегистрированного пользователя in_array из cms.cli_id вложенное поле, извлеките его соответствующее cmx_sentiment
- , если cli_id зарегистрированного пользователя IS NOT в вложенные элементы cms , извлеките элементы с помощью cli_id: 0 , затем получите cmx_sentiment
ИСПОЛЬЗОВАТЬ СЛУЧАИ
с приведенными выше примерами статей index
IF cli_id 4599 входит в приложение
"SENTIMENT" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Positive",
"doc_count" : 3
},
{
"key" : "Neutral",
"doc_count" : 1
}
]
}
ЕСЛИ cli_id 12 входит в приложение
"SENTIMENT" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Negative",
"doc_count" : 2
},
{
"key" : "Positive",
"doc_count" : 1
},
{
"key" : "Neutral",
"doc_count" : 1
}
]
}
ЕСЛИ любой cli_id входит в приложение
"SENTIMENT" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Positive",
"doc_count" : 2
},
{
"key" : "Negative",
"doc_count" : 1
},
{
"key" : "Neutral",
"doc_count" : 1
}
]
}
Как можно улучшить мой запрос, чтобы я мог поместить условный оператор в аггре FILTER моего запроса?