2016-04-12 16 views
0

İç içe geçmiş öğelerin daha fazlasına uyan belgeleri (daha yüksek puan) sağlayan bir sorgu yazmaya çalışıyorum ve bunların eşleşmesi için bunlardan en azına da sahip.İç içe geçmiş sorgu alt koşulla ve "min_should_match"

Şimdiye kadar yaptığım sorgu bu, ancak geri dönen 0 eşleşmesi.

belirtildiği gibi
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "nested": { 
      "path": "jobPost.role", 
      "score_mode": "sum", 
      "query": { 
       "bool": { 
       "should": [ 
        { 
        "term": { 
         "role.id": { 
         "value": "12", 
         "boost": 1 
         } 
        } 
        }, 
        { 
        "term": { 
         "role.id": { 
         "value": "18", 
         "boost": 1 
         } 
        } 
        }, 
        { 
        "term": { 
         "role.id": { 
         "value": "24", 
         "boost": 1 
         } 
        } 
        }, 
        { 
        "term": { 
         "role.id": { 
         "value": "28", 
         "boost": 1 
         } 
        } 
        } 
       ], 
       "minimum_number_should_match": "-40%" 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

, bu şimdiye min_should_match gereksinimi kaldırırsanız, söz konusu maçları dönmek yapar, ancak, çalışmaz.

Sorun şu ki, belirli bir doğruluk düzeyine sahip olmam gerekiyor ve min_score yan tümcesinde geçiş yapamıyorum.

Herhangi bir kolay çözüm? Yine de min_should_match'u ilk must numarasına götürmek ve nested koşuluyla aynı seviyede olmakla ilgili; Sadece ne yapmam gerektiğini ya da başka bir çözümün olup olmadığını bilmiyorum.

cevap

0
bir başlangıç ​​cevap olarak

ve birisi bir (varsa) daha iyi bir yaklaşımla gelmesini bekleyen: Bu benim için bir iş yaptı

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "nested": { 
      "path": "jobPost.role", 
      "score_mode": "sum", 
      "query": { 
       "bool": { 
       "should": [ 
        { 
        "term": { 
         "role.id": { 
         "value": "12", 
         "boost": 1 
         } 
        } 
        }, 
        { 
        "term": { 
         "role.id": { 
         "value": "18", 
         "boost": 1 
         } 
        } 
        }, 
        { 
        "term": { 
         "role.id": { 
         "value": "24", 
         "boost": 1 
         } 
        } 
        }, 
        { 
        "term": { 
         "role.id": { 
         "value": "28", 
         "boost": 1 
         } 
        } 
        } 
       ] 
       } 
      } 
      } 
     }, 
     { 
      "bool": { 
      "should": [ 
       { 
       "term": { 
        "role.id": { 
        "value": "12", 
        "boost": 1 
        } 
       } 
       }, 
       { 
       "term": { 
        "role.id": { 
        "value": "18", 
        "boost": 1 
        } 
       } 
       }, 
       { 
       "term": { 
        "role.id": { 
        "value": "24", 
        "boost": 1 
        } 
       } 
       }, 
       { 
       "term": { 
        "role.id": { 
        "value": "28", 
        "boost": 1 
        } 
       } 
       } 
      ], 
      "minimum_number_should_match": "-40%" 
      } 
     } 
     ] 
    } 
    } 
} 

, ancak kod çoğaltma gibi hissediyor en iyi çözüm değildir .