2015-09-28 16 views
13

Mam zapytanie (oraz jego części - reszta nie ma znaczenia jak paginacji):Elasticsearch - doładowania zagnieżdżone zapytania o wyższej wartości

"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 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 

To dla poszukiwania profil, który ma umiejętność „php” o wartości 2 lub więcej. Użytkownik może wyszukiwać wiele umiejętności => para wartości. Działa bez zarzutu, ale mam jedno pytanie:

Jak zrobić małe podbicie dla dopasowanych umiejętności, które mają wyższe umiejętności. Wartość, aby osoba o wartości PHP 3 była wyższa w wynikach wyszukiwania niż osoba z PHP 2 nawet jeśli oba są poprawne.

Odpowiedz

3

Proponuję za pomocą function_score to zrobić a dokładniej field_value_factor function co pozwala na zastosowanie wartości pola w obliczaniu punktacji (z opcjonalnym czynnik, przez który pomnożyć wartość pola):

{ 
    "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

coraz emisyjnej: : "TransportError: TransportError (500, u'search_phase_execution_exception ', u'org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData nie można przesłać do org.elasticsearch.index.fielddata.IndexNumericFieldData") " –

Powiązane problemy