SORU
14 EYLÜL 2012, Cuma


Alaka artırılması alanına göre ElasticSearch -- değer

Bir belge bir alan belirli bir değere göre alaka artırmak için ElasticSearch bir yolunu bulmalısın. Özellikle, daha yüksek alan değeri, daha alakalı içerdiği doc, arama ne olursa olsun, olması gereken yerde tüm Belgelerim içinde özel bir alan var.

Aşağıdaki belge yapısı göz önünde bulundurun:

{
    "_all" : {"enabled" : "true"},
    "properties" : {
        "_id":            {"type" : "string",  "store" : "yes", "index" : "not_analyzed"},
        "first_name":     {"type" : "string",  "store" : "yes", "index" : "yes"},
        "last_name":      {"type" : "string",  "store" : "yes", "index" : "yes"},
        "boosting_field": {"type" : "integer", "store" : "yes", "index" : "yes"}
        }
}

Boosting_field daha yüksek bir değere sahip belgeler olmak istiyorumdoğal olarak daha uygunboosting_field daha düşük bir değer ile daha. Bu sorgu ve diğer alanlar arasında eşleşen aramaya da her doktor son alaka puanı belirlenmesinde dikkate alınacaktır sadece bir başlangıç noktasıdır. Ama,her şey eşit olduğunda, daha artırılması alanı, daha fazla ilgili belge.

Herkes bunun nasıl yapılacağı hakkında bir fikrin var mı?

Çok teşekkürler!

CEVAP
14 EYLÜL 2012, Cuma


Dizin zaman destek ya da zaman sorgu yapabilirsiniz. Ben genellikle tercih sorgu süresi artırılması bile yapar sorguları biraz daha yavaş, aksi takdirde istiyorum ihtiyacım anda her zaman değiştirmek istiyorum benim artırılması faktörler, genellikle gereken ince ayar ve ihtiyaç oldukça esnek.

Sorgu süresi artırılması elasticsearch sorgu DSL kullanarak uygulamak için farklı yollar vardır

İlk üç sorgularsa belirli sorgu veya filtre maçı hangi belgeler için özel bir destek vermek istiyorsanız kullanışlıdır. Eğer sadece belgeleri son bir ay içinde yayınlanan artırmak istiyorsanız örneğin,. Senin boosting_field bu yaklaşım kullanabilirsiniz ama el ile bazı boosting_field aralıkları tanımlamak ve onları bu güzel değil farklı bir destek vermek gerekir.

En iyi çözüm kullanmak olacaktır, ya da bir sorgu yapmak ve skor script kullanarak değiştirmenizi sağlar Custom Score Query,. Oldukça güçlü, doğrudan skor kendisini değiştirebilir senaryo ile. Öncelikle, skor büyük bir numarası haline kalmaması örneğin, 0 ile 1 arasında bir değer boosting_field değerleri ölçek ederim. Daha fazla veya daha az minimum ve alanın içerebileceği maksimum değerlerin ne tahmin etmek gerekir bunu yapmak için. Hadi mesela en az 0 ve en fazla 100.000 söylüyorlar. Sen ve 1, 0 arasında bir sayı boosting_field değeri ölçek eğer böyle skor sonucu ekleyebilirsiniz:

{
    "query" : {
        "custom_score" : {
            "query" : {
                "match_all" : {}
            },
            "script" : "_score   (1 * doc.boosting_field.doubleValue / 100000)"
        }
    }
}

Ayrıca düşünmek için kullanın boosting_field olarak bir destek faktörü (_score * yerine _score ), ama sonra Zorundasınız ölçekli bir aralığı ile minimum değer 1 (sadece ekleme 1).

Hatta skoru etkilemek için kullandığınız sırada sonucu değiştirmek önemi değeri bir ağırlık ekleyerek dinleyebilirsiniz. Bu onlara farklı bir kilo vermek için birden fazla artırılması faktörler birlikte birleştirmek gerekir Eğer daha ihtiyacımız olacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrew_Huang

    Andrew_Huang

    10 ŞUBAT 2006
  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • ShayLoss

    ShayLoss

    5 Kasım 2009