#python #elasticsearch #elasticsearch-aggregation #elasticsearch-query
#python #elasticsearch #elasticsearch-агрегация #elasticsearch-запрос
Вопрос:
- Мне нужно выполнить поиск в области бизнеса, которая является исследовательской или бухгалтерской, это оператор массива полей (ИЛИ)
- Мне нужно выполнить поиск роли разработчика или тестировщика условие это оператор массива полей (ИЛИ)
- Я хочу получить количество masterid бизнес-области, имен обозначений, роли, которые являются всеми именами
- Фильтр имени — «Group1»
Ниже приведен словарь
test= [ { 'masterid': '1', 'name': 'Group1', 'BusinessArea': [ 'Accounting','Research'], 'Designation': [ 'L1' 'L2' ] }, { 'masterid': '2', 'name': 'Group1', 'BusinessArea': ['Research','Accounting' ], 'Role': [ { 'id': '5032', 'name': 'Tester' }, { 'id': '5033', 'name': 'Developer' } ], 'Designation': [ 'L1' 'L2' ]}, { 'masterid': '3', 'name': 'Group1', 'BusinessArea': [ 'Engineering' ], 'Role': [ { 'id': '5032', 'name': 'Developer' }, { 'id': '5033', 'name': 'Developer', 'parentname': '' } ], 'Designation': [ 'L1' 'L2' ]}]
Ниже приведена функция агрегирования
{
"size": 0,
"aggs": {
"countNames": {
"terms": {
"field": "BusinessArea.keyword"
}
},
"designationNames": {
"terms": {
"field": "Designation.keyword"
}
},
"Role": {
"terms": {
"field": "Role.name.keyword"
}
}
}
}
Ниже приведен запрос фильтрации
{
"query": {
"bool": {
"must": [
{
"terms": {
"BusinessArea.keyword": [
"Research",
"Accounting"
]
}
},
{
"terms": {
"Role.name.keyword": [
"Developer",
"Tester"
]
}
}
]
}
}
}
"filter": [
"term": {
"name.keyword": "Group1"}]
Мне нужно объединить оба запроса, и вывод будет иметь оба
Комментарии:
1. я попытался объединить RequestError: RequestError(400, ‘parsing_exception’, ‘Ожидаемый [START_OBJECT], но найден [START_ARRAY]’)
2. поиск = es.search(индекс = «4», тело = запрос)
Ответ №1:
Хорошее начало!!! Теперь вы можете просто объединить все эти фрагменты следующим образом:
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"term": {
"name.keyword": "Group1"
}
},
{
"terms": {
"BusinessArea.keyword": [
"Research",
"Accounting"
]
}
},
{
"terms": {
"Role.name.keyword": [
"Developer",
"Tester"
]
}
}
]
}
},
"aggs": {
"countNames": {
"terms": {
"field": "BusinessArea.keyword"
}
},
"designationNames": {
"terms": {
"field": "Designation.keyword"
}
},
"Role": {
"terms": {
"field": "Role.name.keyword"
}
}
}
}
Комментарии:
1. когда я беру это, я получаю RequestError: RequestError(400, ‘parsing_exception’, ‘Ожидаемый [START_OBJECT], но найден [START_ARRAY]’)
2. Не обращайте внимания на мой вопрос, но вы уверены, что правильно скопировали / вставили запрос? Можете ли вы поделиться полной ошибкой? Можете ли вы показать свой код python, собирающий запрос, вероятно, это виновник?
3.Оба моих запроса работают
quer = {'query': {'bool': {'must': [{'terms': {'BusinessArea.keyword': ['Silver', 'Gold']}}], 'filter': [{'term': {'name.keyword': 'Group1'}}]}}}
q = { "size": 0, "aggs": { "BusinessArea": { "terms": { "field": "BusinessArea.keyword" } }, "Designation": { "terms": { "field": "Designation.keyword" } }, "Role": { "terms": { "field": "Role.name.keyword" } } } }
4. Покажите свой код (обновите свой вопрос), пожалуйста, ошибка должна быть где-то там
5. Да, порядок не имеет значения.