2017-09-25 3 views
0

J'utilise ceci pour chercher mes tenues:Facteur de valeur du champ Elasticsearch avec multi-appariement?

def self.search(query, purchasedlow, purchasedhigh) 
__elasticsearch__.search(
{ 
    query: { 
    function_score: { 
     query: { 
     bool: { 
      filter: [ 
      { 
       multi_match: { 
       query: query, 
       fields: ['name','description','material'] 
       } 
      }, 
      { 
       range: { 
       purchased: { lte: purchasedhigh.to_i, gte: purchasedlow.to_i}, 
       },   
      } 
      ] 
     } 
     } 
    } 
    } 
} 
) 
end 

Mais je ne sais pas comment ajouter ce code:

field_value_factor: { 
     field: "likes", 
     factor: "100" 
    } 

Je sais que je suis censé le mettre après la score de la fonction, de sorte que le score calculé est ensuite multiplié par la quantité de gens pour faire le score final, mais quand je mets le code après la function_score, je reçois l'erreur suivante:

[400] {"error":{"root_cause":[{"type":"parsing_exception","reason":"[function_score] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":232}],"type":"parsing_exception","reason":"[function_score] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":232},"status":400} 

Où dois-je mettre le facteur de valeur de champ pour qu'il fonctionne correctement?

+0

La réponse est ici: https://stackoverflow.com/questions/46411276/elasticsearch-range-filter-with-multimatch/46411502 – Val

Répondre

0

J'utilisé field_value_factor dans l'une de mes questions comme ceci:

@products = Product.search(
query:{ 
    function_score:{ 
    query:{ 
     bool:{ 
     must:{ 
      multi_match:{ 
      fields: ['brand^5', '_all'], 
      query: "#{query}", 
      fuzziness: "AUTO" 
      } 
     }, 

      filter:{ 
      bool:{ 
       must:[ 
       {term: {"brand":"NordicTrack"}}, 
       {term: {"product_type":"Treadmill"}} 
       ] 
      } 
      } 

     } 
    }, 
    field_value_factor:{ 
     field: "popularity", 
     modifier: "log1p" 
    } 
    } 
})