экранирование специального символа в запросе elasticsearch

#elasticsearch #kibana #sense #elasticsearch-py

#elasticsearch #kibana #смысл #elasticsearch-py

Вопрос:

Мой вопрос прост, я не могу использовать @ в поисковом запросе. Наконец, я обнаружил, что могу экранировать специальные символы с помощью обратной косой черты.

 GET index/_search
{
  "size": 20,
  "query": {
    "query_string": {
      "query": "@as",
      "analyzer": "keyword"
    }
  }
}
 

Но когда я пытаюсь это сделать, я получаю следующую ошибку Unrecognized character escape '@' (code 64)n at . И когда я пытаюсь без @ symbol, я получаю результаты без @ symbol, например

  1. Так же скучал, как и всегда
  2. Как. GUI
  3. Как будто и так далее. может ли кто-нибудь подсказать, как я могу добиться того, чтобы предыдущий запрос мог быть выполнен в соответствии с моими ожиданиями?

Я использую

  • Elasticsearch 2.4.1
  • Ubuntu 14.04
  • Кибана 4.6.1

Ответ №1:

Вы получаете ошибку, потому что нет необходимости экранировать символ «@».
"query": "@as" должно сработать.
Вы также должны проверить свои сопоставления, если ваши поля не помечены как not_analyzed (или не имеют keyword analyzer), вы не увидите результатов поиска — стандартный анализатор удаляет символы, такие как «@», при индексации документа.
Обновить
query_string _all по умолчанию используется поле, поэтому вам нужно настроить это поле так, как показано в этом примере:

 PUT index 
{
   "mappings":{
      "book":{
         "_all":{
            "type":"string",
            "index":"analyzed",
            "analyzer":"whitespace"
         },
         "properties":{
            "name":{
               "type":"string",
               "index":"not_analyzed"
            }
         }
      }
   }
}

PUT /index/book/1
{
"name" : "@foo bar"
}

GET index/_search
{
  "size": 20,
  "query": {
    "query_string": {
      "query": "@foo",
      "analyzer": "keyword"
    }
  }
}
 

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

1. Я вообще не создавал никакого отображения. Я просто сохраняю значения такими, какие они есть. И я вижу в kibana, что поле индексируется и анализируется. Итак, если он использует стандартный анализатор и удаляет символ, что мне теперь делать, чтобы получить мои результаты.

2. если вам нужно иметь возможность поиска по специальным символам, вам необходимо изменить свои сопоставления

3. какой тип сопоставления соответствует моему сценарию? Я новичок в es, поэтому, пожалуйста, уточните ответ.

4. Я храню миллион записей в день. можете ли вы подсказать мне, как структурировать мой индекс, например, много индексов или один индекс? Возникает ли какая-либо проблема, когда я использую один индекс для всех моих данных. какова наилучшая практика?

5. Я думаю, что это не очень хорошая идея — слепо выбирать какой-то подход, не зная, как работает ES. Вы можете начать с чтения этой главы: elastic.co/guide/en/elasticsearch/guide/current/scale.html