Search indexing improvements
This commit is contained in:
74
server/AyaNova/biz/SearchTranslationWordBreakDataCache.cs
Normal file
74
server/AyaNova/biz/SearchTranslationWordBreakDataCache.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using System.Collections.Generic;
|
||||
using AyaNova.Util;
|
||||
using AyaNova.Models;
|
||||
namespace AyaNova.Biz
|
||||
{
|
||||
|
||||
public class SearchTranslationWordBreakDataCache
|
||||
{
|
||||
static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 1);
|
||||
private static Dictionary<long, TranslationWordBreakingData> theCache = new Dictionary<long, TranslationWordBreakingData>();
|
||||
public SearchTranslationWordBreakDataCache() { }
|
||||
public static async Task<TranslationWordBreakingData> GetWordBreakData(long id)
|
||||
{
|
||||
await semaphoreSlim.WaitAsync();
|
||||
try
|
||||
{
|
||||
if (!theCache.ContainsKey(1))
|
||||
theCache[id] = await GetTranslationSearchDataAsync(id);
|
||||
return theCache[id];
|
||||
}
|
||||
finally
|
||||
{
|
||||
semaphoreSlim.Release();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
internal static async Task<TranslationWordBreakingData> GetTranslationSearchDataAsync(long translationId)
|
||||
{
|
||||
TranslationWordBreakingData LSD = new TranslationWordBreakingData();
|
||||
AyContext ct = ServiceProviderProvider.DBContext;
|
||||
//Get stopwords
|
||||
//Validate translation id, if not right then use default instead
|
||||
var Param = new List<string>();
|
||||
translationId = await TranslationBiz.ReturnSpecifiedTranslationIdIfExistsOrDefaultTranslationId(translationId, ct);
|
||||
Param.Add("StopWords1");
|
||||
Param.Add("StopWords2");
|
||||
Param.Add("StopWords3");
|
||||
Param.Add("StopWords4");
|
||||
Param.Add("StopWords5");
|
||||
Param.Add("StopWords6");
|
||||
Param.Add("StopWords7");
|
||||
var Stops = await TranslationBiz.GetSubsetStaticAsync(Param, translationId);
|
||||
|
||||
foreach (KeyValuePair<string, string> kvp in Stops)
|
||||
{
|
||||
//Each stopwords translation key is a space delimited list of words and in the case of an empty local string (i.e. StopWords7) it's value is a single question mark
|
||||
if (kvp.Value != "?")
|
||||
{
|
||||
LSD.StopWords.AddRange(kvp.Value.Split(" "));
|
||||
}
|
||||
}
|
||||
|
||||
LSD.CJKIndex = await TranslationBiz.GetCJKIndexAsync(translationId, ct);
|
||||
return LSD;
|
||||
}
|
||||
|
||||
//Class to hold relevant translation data for breaking text
|
||||
public class TranslationWordBreakingData
|
||||
{
|
||||
public bool CJKIndex { get; set; }
|
||||
public List<string> StopWords { get; set; }
|
||||
public TranslationWordBreakingData()
|
||||
{
|
||||
CJKIndex = false;
|
||||
StopWords = new List<string>();
|
||||
}
|
||||
}
|
||||
|
||||
}//eoc
|
||||
}//eons
|
||||
Reference in New Issue
Block a user