Я пытаюсь построить запрос с двумя фильтрами. Один может содержать один элемент или список элементов, а другой может содержать только один элемент. Когда я запускаю этот комбинированный фильтр, кажется, что фильтр просто игнорируется, и он возвращает лучшее совпадение с другими столбцами. Я использую ElasticSearch 6.8 с Python Flask.
animallist потенциально может выглядеть как [{"match": {"animal_species": "hippo"}}] или [{"match": {"animal_species": "lopear"}}, {"match ": {" animal_species ":" Rex "}}]
animal_type будет выглядеть как {" match ": {" animal_type ":" Mammal "}} или {" match ": {" animal_type ":" Bird "}}
Такое ощущение, что с совпадением animal_type что-то не так, потому что у меня раньше был только фильтр видов, и он работал нормально.
body={
'from': (page) * per_page,
'size': per_page,
'query':{
'bool':{
'filter':
{
'bool':{
'must':{
'match':{'animal_type':a_type}},
'should':animallist
}
},
'must':{
'simple_query_string':{
'query':query,
'default_operator': 'AND',
'fields': ['*']
}
}
}
}
}
Мое отображение выглядит так
{
"animal_files":{
"aliases":{
},
"mappings":{
"properties":{
"animal_type":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"animal_species":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"filepath":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"text":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"case_title":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"case_number":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}