Recherche élastique à l’aide du renforcement de champ NEST

J’utilise Elastic Search en C # en utilisant le client fortement typé NEST. J’ai un index contenant des entrées:

[ElasticType(Name = "Entry", IdProperty = "Id")] public class Entry { public ssortingng Id { get; set; } public ssortingng Title { get; set; } public ssortingng Description { get; set; } public ssortingng Award { get; set; } public int Year { get; set; } } 

Où Year est l’année de l’inscription, par exemple 2012, et Award est le type d’atsortingbution gagnée, qui peut être nulle.

Je veux ensuite rechercher ces entrées en utilisant boosting pour différentes propriétés. Dans le code suivant, je souhaite que les résultats soient mieux classés que ceux du titre, par rapport à ceux de la description.

 private IQueryResponse GetMatchedEnsortinges(ssortingng searchText) { return _elasticClient.Search( body => body.Query(q => q.QuerySsortingng(qs => qs.OnFieldsWithBoost(d => d.Add(entry => entry.Title, 5.0) .Add(entry => entry.Description, 2.0)) .Query(searchText)))); } 

On m’a maintenant demandé de booster les résultats de ceux qui ont remporté des prix, ainsi que de booster de nouvelles entrées (c’est-à-dire d’ici à l’année).

Comment puis-je faire cela? Est-ce quelque chose qui doit être fait dans le cadre du service d’indexation ou de la recherche?

Vous pouvez y parvenir en combinant une requête de boosting et une requête custom_score

au lieu d’augmenter l’année, nous modifions le score en fonction de l’année car:

 (_score + 2013) > (_score + 1999) 

Les nouveaux résultats vont flotter au sumt.

En utilisant une requête de rappel, nous pouvons rétrograder efficacement les résultats manquants dans le champ Award.

voir: http://www.elasticsearch.org/guide/reference/query-dsl/boosting-query.html http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query.html

 _client.Search(s=>s .Query(q =>q .Boosting(bq=>bq .Positive(pq=>pq .CustomScore(cbf=>cbf .Query(cbfq=>cbfq .QuerySsortingng(qs => qs .OnFieldsWithBoost(d => d.Add(entry => entry.Title, 5.0) .Add(entry => entry.Description, 2.0) ) .Query(searchText) ) ) .Script("_score + doc['year'].value") ) ) .Negative(nq=>nq .Filtered(nfq=>nfq .Query(qq=>qq.MatchAll()) .Filter(f=>f.Missing(p=>p.Award)) ) ) .NegativeBoost(0.2) ) ) );