#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. Не стесняйтесь принять, если это помогло, спасибо 😉