Фильтрация и сопоставление с запросом эластичного поиска - PullRequest
0 голосов
/ 22 мая 2019

У меня возникли проблемы с применением вторичного фильтра к моему запросу на поиск эластичности ниже.Только первый фильтр соответствует.Я хочу, чтобы оба фильтра применялись к запросу.

  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "filter": {
              "range": {
                "@timestamp": {
                  "gte": "2019-03-12",
                  "lte": "2019-03-13"
                }
              }
            }
          }
        },
        {
          "bool": {
            "filter": {
              "bool": {
                "must": {
                  "match": {
                    "msg_text": "foo AND bar"
                  }
                }
              }
            }
          }
        }
      ]
    }
  }

1 Ответ

1 голос
/ 22 мая 2019

Ну, я упомянул два решения: первое использует Match Query , а второе использует Query String .

Также я предполагаю, что поле msg_text имеет тип text.

Разница в том, что query_string использует синтаксический анализатор, который будет анализировать упомянутый вами текст на основе таких операторов, как AND, OR.

Хотя match query будет читать текст, анализировать текст и на его основе создаст запрос bool. В смысле вам не нужно упоминать операторов, и он не будет работать

Подробнее о них можно прочитать в ссылках, которые я упомянул.

1. Использование Match Query

POST <your_index_name>/_search
{  
   "query":{  
      "bool":{  
         "filter":{  
            "bool":{  
               "must":[  
                  {  
                     "range":{  
                        "@timestamp":{  
                           "gte":"2019-03-12",
                           "lte":"2019-03-13"
                        }
                     }
                  },
                  {  
                     "match":{  
                        "msg_text":"foo bar"         
                     }
                  }
               ]
            }
         }
      }
   }
}

2. Использование строки запроса

POST <your_index_name>/_search
{  
   "query":{  
      "bool":{  
         "filter":{  
            "bool":{  
               "must":[  
                  {  
                     "range":{  
                        "@timestamp":{  
                           "gte":"2019-03-12",
                           "lte":"2019-03-13"
                        }
                     }
                  },
                  {  
                     "query_string":{  
                        "fields": ["msg_text"],    <----- You can add more fields here using comma as delimiter
                        "query":"foo AND bar"
                     }
                  }
               ]
            }
         }
      }
   }
}

Технически, с вашим решением все в порядке, в том смысле, что оно будет работать, но я надеюсь, что мои ответы ясны, упрощают запрос и помогают вам понять, что вы пытаетесь сделать.

Дайте мне знать, если это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...