ElasticSearch: фильтр с несколькими объектами, которые игнорируются с помощью Simple_Query_String - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь построить запрос с двумя фильтрами. Один может содержать один элемент или список элементов, а другой может содержать только один элемент. Когда я запускаю этот комбинированный фильтр, кажется, что фильтр просто игнорируется, и он возвращает лучшее совпадение с другими столбцами. Я использую 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
                  }
               }
            }
         }
      }

1 Ответ

0 голосов
/ 24 марта 2020

Я нашел ответ. Я изменил совпадение для animal_type на match_phrase. После некоторого чтения, я думаю, что анализатор маркировал каждую букву в запросе на совпадение.

...