2016-03-21 26 views
0

Kullanıcı verilerini saklamak ve verileri Elasticsearch ile aramak için mysql kullanıyorum. Mysql için, kullanıcı tanımlı bir alanım var, bu alan bir JSON formatındaki verileri saklayabilir.Elasticsearch: kullanıcı_adılı bir alanda nasıl arama yapılır?

örnek şöyle veriler: user_defined alanı için

data1 = 
{ 
"name" : "test1", 
"age": 10, 
"user_defined": { 
    "a" : "aaa", 
    "b" : "bbb", 
    "c" : "ccc", 
    ..... 
    } 
} 

data2 = 
{ 
"name" : "test2", 
"age": 20, 
"user_defined": { 
    "d" : "ddd", 
    "e" : "eee", 
    "f" : "fff", 
    ..... 
    } 
} 

, tuş sayısı sabit değildir, değerlerin tip, ben her anahtar aranabilir dize umut tüm eşleştirmeyi nasıl tanımlamak ? Bu tür verileri Elasticsearch tarafından nasıl aramalı?

Herkes iyi bir fikre sahip midir?

cevap

1

: Bundan sonra, sizi endeksleyebilir belgeleri

PUT your_index 
{ 
    "mappings": { 
    "your_type": { 
     "properties": { 
     "name": { 
      "type": "string" 
     }, 
     "age": { 
      "type": "integer" 
     }, 
     "user_defined": { 
      "type": "object" 
     } 
     } 
    } 
    } 
} 

ve bunu olmadığını düşünüyorum Query DSL

POST your_index/_search 
{ 
    "query": { 
    "match" : { 
     "user_defined.a" : "aaa" 
    } 
    } 
} 
+0

Yardımın için teşekkürler! ES'ye "user_defined" dosyasının detayını söylemem gerekmiyor mu demek istiyorsun? – pangpang

+0

Bu değerlerde daha sonra çalıştırmak istediğiniz sorgu türüne bağlı olarak, ES'ye ihtiyacınız olmayacaktır, ve tüm değerler dizgiden olduğundan, kolay olacaktır. – Val

+0

Bir sorun buldum. Eğer '' 'bir Çince karakter ise,' user_defined.a' ile arama yapamıyorum. – pangpang

-1

Elasticsearch'teki bir belgedeki her alan, dizinlenir ve varsayılan olarak aranabilir.

Elasticsearch, arama yapmak için Search Lite API ve Query DSL sağlar.

Böyle, "type": "object" olarak user_defined eşleştirmesini tanımlayabilir
+0

ile kolayca arama bir cevap – pangpang

İlgili konular