Skip to content

Instantly share code, notes, and snippets.

@sitefinitySDK
Created May 21, 2025 07:44
Show Gist options
  • Save sitefinitySDK/d2538b12e055d07369bb5521de452c65 to your computer and use it in GitHub Desktop.
Save sitefinitySDK/d2538b12e055d07369bb5521de452c65 to your computer and use it in GitHub Desktop.
SF_11.1, SF_11.2, SF_12.0, SF_12.1, SF_12.2, SF_13.0, SF_13.1, SF_13.2, SF_13.3, SF_14.0, SF_14.1, SF_14.2, SF_14.3, SF_14.4, SF_15.0, SF_15.1, SF_15.2 - https://www.progress.com/documentation/sitefinity-cms/for-developers-customize-the-lucene-search-scoring
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using System.Collections.Specialized;
using Telerik.Sitefinity.Configuration;
using Telerik.Sitefinity.Search;
using Telerik.Sitefinity.Search.Configuration;
using Telerik.Sitefinity.Services.Search.Configuration;
using Telerik.Sitefinity.Services.Search.Data;
namespace SitefinityWebApp.Documentation.Samples.Search
{
public class CustomizedLuceneSearchService : LuceneSearchService
{
protected virtual Query BuildLuceneQuery(string compiledQuery, SearchOptions searchOptions, Searcher searcher = null)
{
var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, string.Empty, this.GetAnalyzer());
if (compiledQuery.Contains("*"))
{
if (searchOptions.SearchType == SearchType.Contains)
{
parser.AllowLeadingWildcard = true;
}
parser.MultiTermRewriteMethod = WildcardQuery.SCORING_BOOLEAN_QUERY_REWRITE;
}
var query = parser.Parse(compiledQuery);
if (searcher != null)
{
query = searcher.Rewrite(query);
}
bool excludeAge;
var config = this.GetLuceneServiceConfig();
bool.TryParse(config[LuceneSearchService.ExcludeContentAgeFromScoreCalculation], out excludeAge);
return new SitefinityCustomScoreQuery(query, excludeAge);
}
private NameValueCollection GetLuceneServiceConfig()
{
var searchConfig = Config.Get<SearchConfig>();
IConfigElementItem luceneService;
if (searchConfig.SearchServices.TryGetItem(LuceneSearchService.ServiceName, out luceneService))
{
var parameters = ((SearchServiceSettings)luceneService.Element).Parameters;
return parameters;
}
else
{
return new NameValueCollection();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment