2016-03-22 21 views
0

Özel bir veri yapısına sahibim. Örneğin:Elasticsearch, iki boyutlu bir diziyi eşleştirmeyi nasıl başarabilir?

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

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

dosyalanan özel ben ["tel", "1234567"] aramak istediğiniz, iki boyutlu bir dizidir. ES tarafından nasıl mümkün hale getirilir?

+0

Can "custom" dizininiz nasıl tanımlanır? Bu iki boyutlu dizilimdeki problem, ES'nin analiz sırasında onu düzleştirmesidir, böylece 'custom', 'tel',' 1234567', 'weibo',' abcde' vb., Yani 2D yapısını içerecektir. – Val

cevap

3

custom dizininizi dizine ekleme şeklinizi değiştirmeniz gerekir. Sorun, ES'nin analiz sırasında düzleştirilmesidir, böylece custom, tel, 1234567, weibo, abcde vb. Göstergelerini içerecektir, yani 2D yapısı kaybolur. Eğer tel ve 1234566 sorgulayamaz istiyorsanız

, buna benzer bir nested datatype, gibi custom alanı tanımlamak gerekir.

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

Sonra olabilir endeksi bu gibi belgeler: Nihayet

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

, siz "tel 1234567" sorgulamak ve aşağıdaki sorgu ile bekliyoruz belgeleri alabilirsiniz:

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

kaybedildi Çok teşekkürler! Bir deneyeceğim. Gerçekten çok yardımcı oldun! – pangpang

+0

Cool, bize nasıl olduğunu bilelim. – Val

+0

Yeni bir sorum var, bana yardım edebilir misin? http://stackoverflow.com/questions/36199531/how-to-match-email-or-telephone-by-elasticsearch – pangpang

İlgili konular