2016-10-26 4 views
0

私はElasticSearchのドキュメントごとに、「生の」マルチフィールドとして、解析し、フィールドの非分析されたバージョンを追加しようとしています作成されません Elasticsearchマルチフィールドに「生」の値は

これは一般的によくサポートされているパターンのようです。私は直接インデックスを照会した場合、すなわちGET /人、私は上記の投稿したとして、私はマッピングを参照してくださいので、私はその確信

{ 
"person": { 
    "aliases": {}, 
    "mappings": { 
     "employee": { 
     "properties": {  
      "userName": { 
       "type": "string", 
       "analyzer": "autocomplete", 
       "fields": { 
        "raw": { 
         "type": "string", 
         "index": "not_analyzed" 
        } 
       } 
      } 
     } 
    } 
} 

私は、次のインデックス/フィールドを作成しました構文エラーなどはありませんでした。

しかし、インデックスにデータをプッシュすると、userName.rawフィールドは作成されません。

{ 
    "_index": "person",  
    "_type": "employee",  
    "_id": "2",  
    "_version": 1, 
    "found": true,  
    "_source": {  
    "username": "Test Value"  
    }  
}  

誰かが見逃していますか?

ありがとうございます!

編集: これは、インデックスを作成する際の初心者の間違いでした。

PUT person 
{ 
    "person": { 
    "aliases": {}, 
    "mappings": { 
     "employee": { 
     "properties": { 
      "email": { 

personキーが「人物」インデックスでPUTされていることに注意してください。これは入れ子の人を作成していました。

正しい構文は、彼が正しいと、Linoy.M.Kの回答を見てください、余分な「人」

PUT person 
    { 
     "aliases": {}, 
     "mappings": { 
      "employee": { 
      "properties": { 
       "email": { 

を削除することです。 IDを使用してレコードを取得するときに、「生の」フィールドは表示されません。クエリの一部としてのみ有効です。あなたのソースドキュメントを変更することはありません複数のアナライザを追加する

答えて

1

は、ソース文書は常に唯一

追加・アナライザは、あなたが探してないときに便利です

username.rawないユーザー名を持っていることを意味し、あなたが今のユーザー名とusername.rawで検索することができることを意味以下のような異なる行動を達成する。

GET /person/employee/_search 
    { 
     "query": { 
      "match": { 
       "username": "Te" 
      } 
     } 
    } 

GET /person/employee/_search 
     { 
      "query": { 
       "match": { 
        "username.raw": "Test Value" 
       } 
      } 
     } 
関連する問題