2016-04-07 4 views
1

Возможно, я не понимаю это правильно, но при использовании Query String Query для поиска моего индекса указывается, что зарезервированные или специальные символы должны быть экранированы.Сохранять ли зарезервированные символы в запросе Elasticsearch?

https://www.elastic.co/guide/en/elasticsearch/reference/2.1/query-dsl-query-string-query.html#_reserved_characters

Зарезервированные символы: + - = & & || > <!() {} []^"~ *?: \/

Неспособность избежать этих специальных символов может привести к ошибке синтаксиса, которая предотвратит запуск вашего запроса."

В настоящее время мой индекс не выделяет специальные символы, так как я использую только стандартный анализатор, но у меня есть и анализ, и анализ на всех строковых полях.

Так что, если у меня есть эти строки индексируются:

quick fox 
brown fox 

Когда я выполнить запрос:

{ 
    "query_string" : { 
     "query" : "(quick OR brown) AND fox", 
    } 
} 

правильные результаты возвращаются. Но на основе документации с зарезервированными символами должен ли запрос с круглыми скобками «(» и «)« скрываться в запросе строки запроса? Я немного смущен, когда нужно сбежать от зарезервированных символов, а когда не в запросе?

Должен ли он быть ?:

{ 
    "query_string" : { 
     "query" : "\(quick OR brown\) AND fox", 
    } 
} 

Я знаю, что круглые скобки используются для группировки, так что имеет смысл не избежать их. Но какие зарезервированные символы всегда нужны для того, чтобы избежать запросов Elasticsearch? Только когда зарезервированные символы являются операторами?

ответ

1

Зарезервированные символы должны быть экранированы, если они не являются частью синтаксиса запроса.

Итак, в (quick OR brown) AND fox вам ничего не избежать.

Но если, например, ваше поле содержит зарезервированный символ, который вы хотите найти, например. ваше поле содержит Hello! и ! является зарезервированным эквивалентный характер к NOT и вы хотите найти Hello!, то ваш запрос должен быть как этот

`Hello\! AND blabla` 
     ^^ 
     || 
escaped reserved char 
+0

Вот что я изначально думал, но некоторые зарезервированные символы будут бросать например, для синтаксического анализа: если запрос с поисковой строкой «etc/elasticsearch», он выдает исключение. Вот почему я не понимаю, какие символы нужно избегать для поисковых запросов и не будет влиять на результаты поиска. – Lumpy

+0

В этом случае вам нужно сбежать от него как '' '' '' '' '' '' '' '' '' '' '' '' '' '' ', поскольку прямая косая черта является частью значения, которое вы запрашиваете, а не является частью синтаксиса запроса. – Val

+0

Я думаю, это то, что я пытался узнать. Какие зарезервированные символы должны быть экранированы или какие из них можно просто пропустить. – Lumpy

Смежные вопросы