ElasticSearch'e sadece birkaç günlüğüm var ve bir öğrenme alıştırması birkaç iş listeleme sitesinden işleri toplayan ve bazı verileri içeren bir indeksi dolduran ilkel bir iş kazıyıcıyı hayata geçirdi. Benim için oynamak için.ElasticSearch'te filtrelenmiş, iç içe geçmiş iç_hits sorgusu üzerinde toplama
Dizinde, işleri listeleyen her web sitesi için bir belge bulunur. Bu belgelerin her birinin bir özelliği, o sitede bulunan her bir iş için bir nesne içeren bir 'iş' dizisidir. Her işi kendi dokümanı olarak indekslemeyi düşünüyorum (özellikle ElasticSearch belgelerinde inner_hits'in deneysel bir özellik olduğunu söylediği için), ancak şu an için, ElasticSearch'in inner_hits ve nested özelliklerini kullanarak yapmak istediğim şeyi başarabiliyor muyum diye bakmaya çalışıyorum. .
Yalnızca eşleşen işleri sorgulayabilir, filtreleyebilir ve geri gönderebilirim. Ancak, aynı inner_hits kısıtlamalarının bir kümeye nasıl uygulanacağından emin değilim.
client.search({
"index": 'jobsitesIdx,
"type": 'sites',
"body": {
"aggs" : {
"jobs" : {
"nested" : {
"path" : "jobs"
},
"aggs" : {
"location" : { "terms" : { "field" : "jobs.location.raw", "size": 25 } },
"company" : { "terms" : { "field" : "jobs.company.raw", "size": 25 } }
}
}
},
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"inner_hits" : { "size": 1000 },
"path": "jobs",
"query":{
"filtered": {
"query": { "match_all": {}},
"filter": {
"and": [
{"term": {"jobs.location": "york"}},
{"term": {"jobs.location": "new"}}
]
}
}
}
}
}
}
}
}
}, function (error, response) {
response.hits.hits.forEach(function(jobsite) {
jobs = jobsite.inner_hits.jobs.hits.hits;
jobs.forEach(function(job) {
console.log(job);
});
});
console.log(response.aggregations.jobs.location.buckets);
});
Bu geri New işlerin bütün inner_hits bana verir: Bu benim (node.js itibaren) çalışıyorum sorgu ve toplamıdır
{
"jobsitesIdx" : {
"mappings" : {
"sites" : {
"properties" : {
"createdAt" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"jobs" : {
"type" : "nested",
"properties" : {
"company" : {
"type" : "string"
},
"engagement" : {
"type" : "string"
},
"link" : {
"type" : "string",
"index" : "not_analyzed"
},
"location" : {
"type" : "string",
"fields" : {
"raw" : {
"type" : "string",
"index" : "not_analyzed"
}
}
},
"title" : {
"type" : "string"
}
}
},
"jobscount" : {
"type" : "long"
},
"sitename" : {
"type" : "string"
},
"url" : {
"type" : "string"
}
}
}
}
}
}
:
Bu
benim eşleme olduğunu York, ama toplam, her yer ve şirket için, sadece inner_hits ile eşleşenler için değil, sayımı gösteriyor.Toplama yalnızca eşleşen inner_hits dosyasında bulunan verilerle nasıl alınacağıyla ilgili herhangi bir öneriniz var mı?
Düzenleme: İstenildiği gibi, eşleme ve dizin verilerinin bir dışa aktarılmasını eklemek için bunu güncelleştiriyorum. Ben, bu kullanarak Taskrabbit en elasticdump aracı ihraç burada bulunabilir: https://github.com/taskrabbit/elasticsearch-dump
endeksi: http://pastebin.com/WaZwBwn4 haritalama: adlandırılmış http://pastebin.com/ZkGnYN94 Yukarıda bağlantılı veriler bu benim özgün söz konusu örnek kod farklıdır
dizin oluşturduğunu jobsites6 Verilerde, işbu belgede atıfta bulunulan jobsitesIdx yerine. Ayrıca, verideki 'iş' türü, yukarıdaki kodda ise 'siteler' dir.
Yanıt verilerini görüntülemek için yukarıdaki kodda bulunan geri bildirimi doldurdum. Ne var ki ben konumu için bu toplanmasına görüyorum, beklendiği gibi, inner_hits ait foreach döngüsü New York'taki tek işleri görüyorum:
[ { key: 'New York, NY', doc_count: 243 },
{ key: 'San Francisco, CA', doc_count: 92 },
{ key: 'Chicago, IL', doc_count: 43 },
{ key: 'Boston, MA', doc_count: 39 },
{ key: 'Berlin, Germany', doc_count: 22 },
{ key: 'Seattle, WA', doc_count: 22 },
{ key: 'Los Angeles, CA', doc_count: 20 },
{ key: 'Austin, TX', doc_count: 18 },
{ key: 'Anywhere', doc_count: 16 },
{ key: 'Cupertino, CA', doc_count: 15 },
{ key: 'Washington D.C.', doc_count: 14 },
{ key: 'United States', doc_count: 11 },
{ key: 'Atlanta, GA', doc_count: 10 },
{ key: 'London, UK', doc_count: 10 },
{ key: 'Ulm, Deutschland', doc_count: 10 },
{ key: 'Riverton, UT', doc_count: 9 },
{ key: 'San Diego, CA', doc_count: 9 },
{ key: 'Charlotte, NC', doc_count: 8 },
{ key: 'Irvine, CA', doc_count: 8 },
{ key: 'London', doc_count: 8 },
{ key: 'San Mateo, CA', doc_count: 8 },
{ key: 'Boulder, CO', doc_count: 7 },
{ key: 'Houston, TX', doc_count: 7 },
{ key: 'Palo Alto, CA', doc_count: 7 },
{ key: 'Sydney, Australia', doc_count: 7 } ]
benim inner_hits New York'ta olanlar ile sınırlı olduğundan, bunu görebiliyorum toplama, tüm konumlar için bana sayım sağladığından, inner_hits'mde yok.
Bazı örnek veriler sağlayabilir misiniz (belki bir gistte veya bir şeyde)? Ve sonuçların iade edilmesini bekliyorsunuz? –