Virtual Happy Hour is canceled this month (March) due to Good Friday.
Try our conversational search powered by Generative AI!
AI OnAI Off
Virtual Happy Hour is canceled this month (March) due to Good Friday.
Well, for those interested in the answer, I just came accross this package : EPiServer.Labs.Find.Toolbox
Here's the approach from this package (extracted from the readme) "Currently the synonym expansion is done in backend (Elastic Search) and relies on a synonym index. We solve this by retrieving and caching the synonym list and expand the matching synonyms on the query, on the client side."
Neat, it means I can use the .UsingSynonymsImproved() and change the SynonymLoader to also filter by siteid, something like so :
public Dictionary<String, HashSet<String>> GetSynonyms(int synonymBatchSize, RuntimeCacheAdapter cache, StaticCachePolicy staticCachePolicy)
{
var statisticLanguageTags = GetStatisticLanguageTags().ToList();
var httpRequest = HttpContext.Current.GetRequestContext().HttpContext;
var site = GetSiteDefinitionByRequest(httpRequest.Request.Url);
statisticLanguageTags.Add($"siteid:{site.Id}");
string synonymCacheKey = GetSynonymCacheKey(statisticLanguageTags);
Dictionary<String, HashSet<String>> synonymsCached;
if (TryGetCachedSynonym(synonymCacheKey, cache, out synonymsCached))
{
return synonymsCached;
}
var loadedSynonyms = LoadSynonymsFromSourceIndex(synonymBatchSize, statisticLanguageTags);
var synonymDictionary = CreateSynonymDictionary(loadedSynonyms);
cache.AddOrUpdate(synonymCacheKey, staticCachePolicy, synonymDictionary);
return synonymDictionary;
}
Adding Synonym is super easy (_settingsService is a service layer I use to call SiteDefinition)
public ActionResult AddSynonym(string phrase, string synonym)
{
var site = _settingsService.GetSiteDefinitionByRequest(Request.Url);
var synonymInstance = new EPiServer.Find.Optimizations.Synonyms.Api.Synonym(phrase, synonym);
synonymInstance.Tags = (synonymInstance.Tags ?? new List<string>()).Concat(new string[]
{
//"language:en", do not add manually, use the parameter on .Add() otherwise it will add as all languages
$"siteid:{site.Id}"
});
var result = _findClient
.Optimizations()
.Synonyms()
.Add(synonymInstance, Language.English);
return RedirectToAction("Index");
}
That's all.
Hi
I know out of the box we can't filter synonyms by site
But I'm wondering if is it possible to filter by site using the tags, for instance I can add a synonyms adding values to the tags property (by code):
Is it possible to query a search filtering the synonyms based on tags (or filter by site)?
Thanks