2016-11-02 6 views
0

Я использую ElasticSearch (2.4) и официальный клиент Python для выполнения простых запросов. Мой код:ElasticSearch query_string не выполняет синтаксический анализ запросов с некоторыми символами

from elasticsearch import Elasticsearch 

es_client = Elasticsearch("localhost:9200") 
index = "indexName" 
doc_type = "docType" 

def search(query, search_size): 
    body = { 
     "fields": ["title"], 
     "size": search_size, 
     "query": { 
      "query_string": { 
       "fields": ["file.content"], 
       "query": query 
      } 
     } 
    } 
    response = es_client.search(index=index, doc_type=doc_type, body=body) 
    return response["hits"]["hits"] 

search("python", 10) # Works fine. 

Проблема заключается в том, что мой запрос содержит несбалансированные скобки или скобки. Например, с search("python {programming", 10) ES бросает:

elasticsearch.exceptions.RequestError: TransportError(400, u'search_phase_execution_exception', u'Failed to parse query [python {programming}]') 

Это ожидаемое поведение ES? Разве он не использует токенизатор для удаления всех этих символов?

Примечание: Это происходит со мной и с использованием Java.

ответ

0

Я читал документацию, а query_string более строгий. Ниже приведены зарезервированные символы: + - = && || > < ! () { } [ ]^" ~ * ? : \ /

Так, как сказал jhilden, я должен был бы избежать их или использовать вместо этого simple_query_string.

Документы: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

1

При использовании query_string в ES это немного странно. Вам нужно избегать двойного обратного слэша.

Следующая терпит неудачу:

GET index1/job/_search 
{ 
    "query": { 
    "query_string": { 
     "fields": ["jobNumber"], 
     "query": "827950 { foo" 
    } 
    } 
} 

следующие работы

GET index1/job/_search 
{ 
    "query": { 
    "query_string": { 
     "fields": ["jobNumber"], 
     "query": "827950 \\{ foo" 
    } 
    } 
} 

Примечание: если вы используете запрос термины или что-то подобное, что вы не нужно бежать, что {

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