I have few records in Solr
index.
- Bachelor of Nursing
- Bachelor of Nursing (Honours)
My requirement is that when I want to search Bachelor of Nursing
then Bachelor of Nursing
should display first and then Bachelor of Nursing (Honours)
because Bachelor of Nursing
have the exact match.
I have created below query for Solr
(((name_t_en:"Bachelor of Nursing")^3.0
OR (name_t_en:"*Bachelor*")^2.5 OR (name_t_en:"*Nursing*")^2.5 OR (keywords_t_en:"*Bachelor*")^2.0 OR (keywords_t_en:"*Nursing*")^2.0)
)
but I am not getting result in proper way which I want.
While I am getting results, I am using below code in Visual Studio
:
var namePredicate = PredicateBuilder.True<ContentPageSearchModel>();
var contentPredicate = PredicateBuilder.True<ContentPageSearchModel>();
var NamePredicate = PredicateBuilder.True<ContentPageSearchModel>();
var ExactNamePredicate = PredicateBuilder.True<ContentPageSearchModel>();
ExactNamePredicate = ExactNamePredicate.Or(item => item.Name == text).Boost(3.0f);
foreach (var word in terms)
{
NamePredicate = NamePredicate.And(item => item.Name.Contains(word).Boost(2.5f));
contentPredicate = contentPredicate.Or(item => item.Keywords.Contains(word).Boost(2.0f));
}
namePredicate = ExactNamePredicate.Or(NamePredicate).Or(contentPredicate);