2015-09-28 15 views
13

ben (iyi bunun bir parçası - dinlenme pagination gibi önemsiz) bir sorgu var:Elasticsearch - yüksek değere sahip boost iç içe sorgu

Bu değere sahip bir beceri "PHP" olan, profil arama için var
"query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "is_active": true 
       } 
      } 
      ], 
      "should": [ 
      { 
       "bool": { 
       "must": [ 
        { 
        "nested": { 
         "path": "skills", 
         "query": { 
         "bool": { 
          "must": [ 
          { 
           "bool": { 
           "must": [ 
            { 
            "range": { 
             "skills.value": { 
             "gte": "2" 
             } 
            } 
            }, 
            { 
            "term": { 
             "skills.skill.name": "php" 
            } 
            } 
           ] 
           } 
          } 
          ] 
         } 
         } 
        } 
        } 
       ], 
       "boost": 2 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 

2 veya daha fazla. Kullanıcı çoklu becerileri => değerler çiftini arayabilir. Çalışıyor, ancak bir sorum var:

Sadece PHP değeri 3 olan kişiyi PHP 2'ye sahip olanlardan daha yüksek arama sonuçlarında daha yüksek olmak için, daha yüksek becerilere sahip eşleştirilmiş beceriler için biraz destek nasıl yapılır her ikisi de doğru eşleşme ise.

cevap

3

Ben bunu yapmak, yani function_score kullanarak önermek daha spesifik (alan değeriyle çarpılacak opsiyonel faktörü ile) puanlama hesaplamasında bir alan değeri kullanmanızı sağlar field_value_factor function:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "is_active": true 
       } 
      } 
      ], 
      "should": [ 
      { 
       "nested": { 
       "path": "skills", 
       "query": { 
        "function_score": { 
        "query": { 
         "bool": { 
         "must": [ 
          { 
          "range": { 
           "skills.value": { 
           "gte": "2" 
           } 
          } 
          }, 
          { 
          "term": { 
           "skills.skill.name": "php" 
          } 
          } 
         ] 
         } 
        }, 
        "functions": [ 
         { 
         "field_value_factor": { 
          "field": "skills.value", 
          "factor": 2 
         } 
         } 
        ] 
        } 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

alma sorunu: : "TransportError: TransportError (500, u'search_phase_execution_exception", u'org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData, org.elasticsearch.index.fielddata.IndexNumericFieldData 'için yayınlanamaz. " –

İlgili konular