2013-03-01 5 views
6

Şu anda kafa karıştırıcı olan şey, sorguda diğer desteklerden çok daha yüksek olan category_id 10'a bir artış eklediğidir. Başka bir kategoriden bir öğe, "Tai Chi", sonuçların en üstünde bir şekilde geliyor. Ben category_id artırmak durumundaKüçük bir etkisi olan bir Elastik Aramayla ilgili Bool sorgusu için artış

[ 
    { 
    "_index": "the_items", 
    "_type": "item", 
    "_id": "34410", 
    "_score": 0.7510745, 
    "_source": { 
     "id": "34410", 
     "title": "Initiez-vous au Tai Chi", 
     "description": "p. Le Tai Chi est un art chevaleresque, initialement originaire de Chine, maintenant partie int\u00e9grante des tr\u00e9sors du patrimoine de l'humanit\u00e9. C'est un art de droiture, un art pour les braves, \u00e0 la recherche du geste juste et de l'attitude juste - la \"ju", 
     "brand_id": "0", 
     "category_id": "497" 
    } 
    }, 
    { 
    "_index": "the_items", 
    "_type": "item", 
    "_id": "45393", 
    "_score": 0.45193857, 
    "_source": { 
     "id": "45393", 
     "title": "Very Hot Chicken", 
     "description": "Laissez-vous tenter par la force du Very Hot Chicken Burger, avec sa sauce piment\u00e9e, ses rondelles de piment vert et sa pr\u00e9paration pan\u00e9e au poulet.\r\nAjoutez-y une tranche de chester fondu, de la salade, des tomates, le tout dans un pain parsem\u00e9 de bl\u00e9 concass\u00e9 pour un burger fort en go\u00fbt !", 
     "brand_id": "0", 
     "category_id": "496" 
    } 
    } 
] 

:

curl -XGET 'http://localhost:9200/austin_items/_search?pretty=true' -d '{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "title": { 
        "boost": 2, 
        "query": "chi", 
        "type": "phrase" 
       } 
       } 
      }, 
      { 
       "match": { 
       "title.partial_title": { 
        "boost": 1, 
        "query": "chic" 
       } 
       } 
      }, 
      { 
       "match": { 
       "description": { 
        "boost": 0.2, 
        "query": "chic" 
       } 
       } 
      }, 
      { 
       "term": { 
       "category_id": { 
        "boost": 10, 
        "value": 496 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}' 

bana aşağıdaki hit veriyor: Ben aşağıdaki sorguyu çalıştırıyorum

{ 
    "the_items": { 
    "item": { 
     "properties": { 
     "brand_id": { 
      "type": "integer" 
     }, 
     "category_id": { 
      "type": "integer" 
     }, 
     "description": { 
      "type": "multi_field", 
      "fields": { 
      "description": { 
       "type": "string", 
       "analyzer": "full_title" 
      } 
      } 
     }, 
     "title": { 
      "type": "multi_field", 
      "fields": { 
      "title": { 
       "type": "string", 
       "analyzer": "full_title" 
      }, 
      "partial_title": { 
       "type": "string", 
       "index_analyzer": "partial_title", 
       "search_analyzer": "full_title", 
       "include_in_all": false 
      } 
      } 
     }, 
     "updated_at": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 

:

Ben bir eşleme 30 gibi aptalca bir şey alan o zaman en iyi sonuçları "Tai Chi" çalıyor. Başka bir şey olmadığı halde arama sonuçlarında "Thai Chi" nin görünmesini istiyorum ama sanki bana bilinmeyen bir nedenden dolayı sorgunun category_id kısmı düzgün çalışmıyor. Bunun neden olduğunu bilen var mı?

+3

Sorgularınızı açıkla = true flag ile yeniden çalıştırır mısınız? Bu puanların nasıl hesaplandığını gösterecektir. – imotov

+0

Bir demet teşekkürler, bu beni doğru yola koydu. Muhtemelen bir elasticsearch probleminden daha fazla bir lucene skorlama problemi. Değerli bir cevabım olduğunda güncellenirim. – unflores

cevap

7

Sorguya eklediğim bir destek temel alınarak skoru değiştirmek istedim. Ancak, skor sadece destek olmak için bir sürü şeyleri hesaba katıyor. Kategori ve marka için bir destek sağlamak için, "custom_boost_factor" kullanarak bitti ve düzenli olarak durumları için bir alt sorgu olarak uyguladı.

curl -XGET 'http://localhost:9200/austin_items/_search?pretty=true' -d ' 
{ 
    "query" : { 
    "filtered" : { 
     "query" : { 
     "bool" : { 
      "should" : [ 
      { "match" : { "title" : { "boost" : 2,"query" : "chi", "type":"phrase"} } }, 
      { "match" : { "title.partial_title" : { "boost" : 1,"query" : "chi"} } }, 
      { "match" : { "description" : { "boost" : 0.2,"query" : "chic"} } }, 
      { "custom_boost_factor": { 
       "query":{ 
        "bool": { 
        "must" : [ 
         { "multi_match": { "query" : "chi", "fields" : ["title", "description"] }}, 
         { "in": { "category_id": [496] } } 
        ] 
        } 
       }, 
       "boost_factor": 2 
       } 
      }, 
      { "custom_boost_factor": { 
       "query":{ 
        "bool": { 
        "must" : [ 
         { "multi_match": { "query" : "chi", "fields" : ["title", "description"] }}, 
         { "in": { "brand_id": [999] } } 
        ] 
        } 
       }, 
       "boost_factor": 3 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
}' 
İlgili konular