2016-11-02 44 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を使用しています。

答えて

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" 
    } 
    } 
} 

注:用語のクエリまたはあなたがないをエスケープする必要があることのような何か他のものを使用していた場合に{

関連する問題