2016-10-16 184 views
1

私の質問は単純ですが、私は検索クエリで@を使用することはできません。最後に、バックスラッシュを使用して特殊文字をエスケープできることがわかりました。elasticsearchクエリのエスケープ特殊文字

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

しかし、私がしようとすると、次のエラーが発生しますUnrecognized character escape '@' (code 64)\n at。私は、@記号なしにしようとすると

  1. としては、これまで
  2. としてとして逃したように、私は、@記号なしの結果を得ました。 GUI
  3. もしかしたら など。どのように私は前のクエリを達成するために私の期待通りに実行することができます示唆することができますか?

私はElasticsearch 2.4.1

  • を使用しています
  • のUbuntu 14.04
  • Kibana 4.6.1

答えて

0

"をエスケープする必要がないので、あなたは、エラーが発生します@' キャラクター。
"query": "@as"が有効です。
フィールドにnot_analyzedと表示されていない(またはkeywordアナライザがない)場合は、検索結果が表示されません。標準の分析ツールでは、ドキュメントのインデックスを作成するときに「@」などの文字が削除されます。
UPDATE
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" 
    } 
    } 
} 
+0

私はまったくのマッピングを作成していません。私は値をそのまま保存します。そして、私は木場でフィールドが索引付けされ分析されていることがわかります。標準的なアナライザを使用してキャラクタを取り除くと、結果を得るために今何をすればよいのでしょうか。 – Tamizharasan

+0

特殊文字で検索する必要がある場合は、マッピングを変更する必要があります –

+0

私のシナリオにはどんなタイプのマッピングがマッチしていますか?私は新しい人ですから、答えを詳しく教えてください。 – Tamizharasan

関連する問題