#elasticsearch #kibana #elasticsearch-query
Вопрос:
Вопрос Я пытаюсь написать запрос ElasticSearch, который соответствует всем свойствам типа сопоставления (MyFirstMappingType). Если одно свойство не совпадает, оно не должно возвращать этот элемент. Они не должны смешивать совпадения, чтобы получить совпадение.
Отображение
"mappings": {
"item": {
"_all": { "enabled": "false" },
"properties": {
"MyFirstMappingType": {
"properties": {
"field1": { "type": "keyword" },
"field2": { "type": "keyword" },
"field3": { "type": "text", "index": "false" }
}
}
}
}
}
Этот запрос возвращает элементы, если элемент соответствует каждому из этих полей. Но когда элемент имеет более одного «MyFirstMappingType», он будет смешиваться и совпадать. Например, этот запрос все равно вернет этот элемент.
GET myfirst/item/_search
{
"from": 0,
"size": 38,
"_source": [
"MyFirstMappingType"
],
"query": {
"bool": {
"filter": [
{
"term": {
"field1": "foo"
}
},
{
"term": {
"field2": "bar"
}
},
{
"term": {
"field3": "world"
}
}
}
]
}
}
"MyFirstMappingType" : [
{
"field1" : "foo",
"field2" : "bar",
"field3" : "hello"
},
{
"field1" : "foo",
"field2" : "world",
"field3" : "foo"
},
{
"field1" : "foo",
"field2" : "foo",
"field3" : "world"
}
]
Ответ №1:
Чтобы выполнить запрос к каждому объекту массива независимо, вам необходимо определить MyFirstMappingType
, будет ли он иметь вложенный тип
Добавление рабочего примера с сопоставлением индексов и поисковым запросом
Сопоставление индексов:
{
"mappings": {
"properties": {
"MyFirstMappingType": {
"type": "nested"
}
}
}
}
Поисковый запрос:
{
"query": {
"nested": {
"path": "MyFirstMappingType",
"query": {
"bool": {
"filter": [
{
"term": {
"MyFirstMappingType.field1": "foo"
}
},
{
"term": {
"MyFirstMappingType.field2": "bar"
}
},
{
"term": {
"MyFirstMappingType.field3": "world"
}
}
]
}
}
}
}
}
Комментарии:
1. @OneThumbs пожалуйста, просмотрите ответ и дайте мне знать, если это решит вашу проблему
2. к сожалению, я не могу изменить отображение нашего индекса. Если сделать его «вложенным» типом-единственное решение, то мне может не повезти. Но ради поиска решения я все равно попробую это сделать, чтобы определить, вернет ли оно желаемые результаты. Спасибо!
3. @OneThumbs AFAIK для достижения требуемого результата нет другого способа, кроме использования вложенного типа. Пожалуйста, дайте мне знать, сработало ли это решение для вас 😉
4. @OneThumbs вы пробовали
nested
использовать тип данных ?5. Да! Это сработало так, как описано. Спасибо вам за помощь.