Почему фильтр не работает для эластичного поиска?

#elasticsearch

Вопрос:

У меня есть такой запрос:

 "query": {  "bool": {  "must": [  {  "query_string": {  "query": "query",  "fields": [  "some.field"  ],  "lenient": true,  "default_operator": "OR"  }  }  ],  "filter": [    {"term": {  "test.name.enum": {  "value":"filterTerm"  }  }}  ]  

и составление карты для «test.name» заключается в следующем:

 "test" : {  "type" : "nested",  "properties" : {  "name" : {  "type" : "text",  "fields" : {  "delimiter" : {  "type" : "text",  "index_options" : "freqs",  "analyzer" : "iq_text_delimiter"  },  "enum" : {  "type" : "keyword",  "ignore_above" : 2048  },  "joined" : {  "type" : "text",  "index_options" : "freqs",  "analyzer" : "i_text_bigram",  "search_analyzer" : "q_text_bigram"  },  "prefix" : {  "type" : "text",  "index_options" : "docs",  "analyzer" : "i_prefix",  "search_analyzer" : "q_prefix"  },  "sear_as_type" : {  "type" : "search_as_you_type",  "doc_values" : false,  "max_shingle_size" : 3  },  "stem" : {  "type" : "text",  "analyzer" : "iq_text_stem"  },  "synonym" : {  "type" : "text",  "analyzer" : "synonym_analyzer"  }  },  "index_options" : "freqs",  "analyzer" : "iq_text_base"  }    }    

однако, когда я пытаюсь отфильтровать, он не возвращает никаких результатов, несмотря на то, что для этого фильтра существует результат и возвращает 0 попаданий, в перечислении здесь есть ключевое слово типа, которое, как я думал, вы должны отфильтровать? Я новичок в elasticsearch, поэтому любая помощь будет признательна

Ответ №1:

Поскольку test объявлен nested , ваш фильтр nested также должен включать запрос:

 ...  "filter": [  {  "nested": {  "path": "test",  "query": {  "term": {  "test.name.enum": {  "value": "filterTerm"  }  }  }  }  }  ]  

Комментарии:

1. Потрясающе, рад, что это помогло!

2. Не стесняйтесь принять, если это помогло, спасибо 😉