2016-03-22 8 views
0

私は特別なデータ構造を持っています。たとえば:2次元配列にマッチする方法をElasticsearch?

{ 
"name": "test", 
"age": 20, 
"gender": "M", 
"custom": [ 
    ["tel", "1234567"], ["weibo", "abcde"], ["weixin", "abcdefg"]...... 
] 
} 

{ 
"name": "test1", 
"age": 30, 
"gender": "F", 
"custom": [ 
    ["电话", "1234567"], ["微博", "abcde"], ["微信", "abcdefg"]...... 
] 
} 

提出カスタムは、2次元配列である、私は["tel", "1234567"]を検索したいです。 ESでそれを可能にする方法は?

+0

缶'custom'配列の定義方法を変更しますか?この2次元配列の問題点は、解析中にESがそれを平坦化して、 'custom'が' tel'、 '1234567'、' weibo'、 'abcde'などのトークンを含むことです。すなわち、2D構造紛失した – Val

答えて

3

customの配列のインデックス方法を変更する必要があります。問題は、解析中にESが平坦化されるため、tel1234567weiboabcdeなどのトークンを含むことになります。つまり、2D構造が失われます。

あなたはtel1234566を照会することができるようにしたい場合は、これに似たnested datatype、としてあなたcustomフィールドを定義する必要があります。

PUT index 
{ 
    "mappings": { 
    "type": { 
     "properties": { 
     "name": { 
      "type": "string" 
     }, 
     "age": { 
      "type": "integer" 
     }, 
     "gender": { 
      "type": "string" 
     }, 
     "custom": { 
      "type": "nested", 
      "properties": { 
      "key": { 
       "type": "string" 
      }, 
      "value": { 
       "type": "string" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

その後、あなたは、このようなインデックスは、ドキュメントすることができます:

PUT index/type/1 
{ 
"name": "test", 
"age": 20, 
"gender": "M", 
"custom": [ 
    {"key": "tel", "value": "1234567"}, 
    {"key": "weibo", "value": "abcde"}, 
    {"key": "weixin", "value": "abcdefg"} 
] 
} 

最後に、あなたは "TEL 1234567" を照会して、次のクエリを期待していた文書を取得することができます:

POST index/type/_search 
{ 
    "query": { 
    "nested": { 
     "path": "custom", 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "custom.key": "tel" 
       } 
      }, 
      { 
       "term": { 
       "custom.value": "1234567" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

ありがとう!私は試してみる。本当に大きな助けになりました! – pangpang

+0

クール、それがどうなるか教えてください。 – Val

+0

新しい質問があります。お手伝いできますか? http://stackoverflow.com/questions/36199531/how-to-match-email-or-telephone-by-elasticsearch – pangpang

関連する問題