2012-10-24 25 views
10

ElasticSearch'i kullanarak, alaka düzeyini etkilemek için bir merkez noktadan mesafe alan bir arama oluşturun.ElasticSearch - sorguyla ilgili alaka düzeyini etkilemek için noktadan uzaklığı kullanın

Mümkün olduğunu bildiğim bir noktadan uzaklaşmak istemiyorum çünkü sonuçların da etkilenmesi için aranan sorguya göre alaka düzeyini istiyorum.

Bir arama dizgisini, "kahve" deyin ve bir lat/lon, "38, -77" deyin ve sonuçlarımın "kahve ile ne kadar ilgili olduklarının bir kombinasyonu "ve 38, -77" ye ne kadar yakınlar.

Teşekkürler!

cevap

6

Bir centerpoint mesafeye göre _score değiştirmeye Custom Score Query senaryosunda olduğu distance function kullanabilirsiniz.

+0

Bu ağırlıklar, gerçek aramadan sonra uygulanır mı? Sormamın sebebi, aramadaki sınırın 100 sonuç olması ve toplam eşleşme sonuçlarının 1000 olmasından kaynaklanıyorsa, ilk 100'den sonra gelirse çok yakın sonuçlar çıkarılabilir. –

+0

Bu ağırlıklar aramadan sonra uygulanır. almadan önce. İlk arama yapılır ve 1000 (örneğinizde) sonuçları toplanır. Toplanan her sonuç için, alaka düzeyi skoru, sağlanan komut dosyası kullanılarak hesaplanır ve en iyi 100 sonuç korunur. Arama sonuçlarından tüm 1000 kayıt işlendiğinde, ilk 100 kayıt alınır. – imotov

+0

Yardımlarınız için çok teşekkürler! Elasticsearch bu şekilde çalışır mı? Büyük miktarda "bulanık" içeren bazı sorgular için, potansiyel arama seti düşük alaka düzeyiyle milyonlarca sonuç içerebiliyor. Elasticsearch, aramayı ne zaman durduracağını nasıl biliyor? –

10

Son zamanlarda (0.90.4) eklendi function_score sorgu türü, uzaklığa göre sıralama için destek ekler. Bu, özel puan sorgu türüne bir alternatiftir.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

bir örneği, oradan kaldırılmış:

"query": { 
    "function_score": { 
    "functions": [ 
     { "gauss": { "loc": { "origin": "51,0", "scale": "5km" }}}, 
    ] 
    } 
} 

Bu uzaklığa göre skorlar verilen bir alan ("loc") bir bozunma fonksiyonu (birkaç vardır) uygular belirli ölçek. Bu size, özel komut dosyaları yazmadan nasıl sıralanması gerektiğine dair bir çok esneklik sağladığından, uzaklık sıralamada tam olarak istediğiniz şeydir.

+0

Ne tür bir alan "loc"? Biraz daha açıklayabilir misin? Bu "loc" gibi bir şeyim var: "12.5,65.5" ve çalışıyor gibi görünmüyor. Bu yazımdan bu yana –

+0

değişmiş olabilir, son elasticsearch sürümlerinde coğrafi şeyler konusunda çok fazla değişiklik oldu. 0.90.4 uzun zaman önceydi. –

+0

Bunu öğrenecek. Teşekkürler ! –