#121 hopefully improving search
This commit is contained in:
parent
ce3e4c21af
commit
3149349649
@ -168,7 +168,12 @@ namespace GanjooRazor.Pages
|
||||
for (int i = 0; i < queryParts.Length; i++)
|
||||
{
|
||||
string cssClass = i % 3 == 0 ? "hilite" : i % 3 == 1 ? "hilite2" : "hilite3";
|
||||
poem.PlainText = Regex.Replace(poem.PlainText, queryParts[i], $"<span class=\"{cssClass}\">{queryParts[i]}</span>", RegexOptions.IgnoreCase | RegexOptions.RightToLeft);
|
||||
string finalPlainText = "";
|
||||
foreach(string line in poem.PlainText.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries))
|
||||
{
|
||||
finalPlainText += $"<p>{line}</p>";
|
||||
}
|
||||
poem.PlainText = Regex.Replace(finalPlainText, queryParts[i], $"<span class=\"{cssClass}\">{queryParts[i]}</span>", RegexOptions.IgnoreCase | RegexOptions.RightToLeft); ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1020,6 +1020,24 @@ namespace RMuseum.Controllers
|
||||
return BadRequest(res.ExceptionString);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// separate verses in poem.PlainText with Environment.NewLine instead of SPACE
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[Route("regenplaintext")]
|
||||
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + RMuseumSecurableItem.ImportOperationShortName)]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public IActionResult RegerneratePoemsPlainText()
|
||||
{
|
||||
RServiceResult<bool> res =
|
||||
_ganjoorService.RegerneratePoemsPlainText();
|
||||
if (res.Result)
|
||||
return Ok();
|
||||
return BadRequest(res.ExceptionString);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ganjoor Service
|
||||
/// </summary>
|
||||
|
||||
@ -891,6 +891,12 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.GanjoorController.RegerneratePoemsPlainText">
|
||||
<summary>
|
||||
separate verses in poem.PlainText with Environment.NewLine instead of SPACE
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Controllers.GanjoorController._ganjoorService">
|
||||
<summary>
|
||||
Ganjoor Service
|
||||
@ -6832,6 +6838,12 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IGanjoorService.RegerneratePoemsPlainText">
|
||||
<summary>
|
||||
separate verses in poem.PlainText with Environment.NewLine instead of SPACE
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IGanjoorService.CacheCleanForPageById(System.Int32)">
|
||||
<summary>
|
||||
clean cache for paeg by id
|
||||
@ -6852,15 +6864,6 @@
|
||||
<param name="commentId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IGanjoorService.GetVersesByQuery(System.String,System.Int32,RSecurityBackend.Models.Generic.PagingParameterModel)">
|
||||
<summary>
|
||||
Get Verses By query
|
||||
</summary>
|
||||
<param name="query"></param>
|
||||
<param name="poetId"></param>
|
||||
<param name="pagingParameterModel"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IGanjoorService.Search(RSecurityBackend.Models.Generic.PagingParameterModel,System.String,System.Nullable{System.Int32},System.Nullable{System.Int32})">
|
||||
<summary>
|
||||
Search
|
||||
@ -7867,15 +7870,6 @@
|
||||
<param name="recitation"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetVersesByQuery(System.String,System.Int32,RSecurityBackend.Models.Generic.PagingParameterModel)">
|
||||
<summary>
|
||||
older search method
|
||||
</summary>
|
||||
<param name="query"></param>
|
||||
<param name="poetId"></param>
|
||||
<param name="paging"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetSimilarPoems(RSecurityBackend.Models.Generic.PagingParameterModel,System.String,System.String,System.Nullable{System.Int32})">
|
||||
<summary>
|
||||
Get Similar Poems accroding to prosody and rhyme informations
|
||||
@ -7918,6 +7912,12 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.RegerneratePoemsPlainText">
|
||||
<summary>
|
||||
separate verses in poem.PlainText with Environment.NewLine instead of SPACE
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.HealthCheckContents">
|
||||
<summary>
|
||||
examine site pages for broken links
|
||||
|
||||
@ -284,6 +284,12 @@ namespace RMuseum.Services
|
||||
/// <returns></returns>
|
||||
RServiceResult<bool> HealthCheckContents();
|
||||
|
||||
/// <summary>
|
||||
/// separate verses in poem.PlainText with Environment.NewLine instead of SPACE
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
RServiceResult<bool> RegerneratePoemsPlainText();
|
||||
|
||||
/// <summary>
|
||||
/// clean cache for paeg by id
|
||||
/// </summary>
|
||||
@ -304,16 +310,6 @@ namespace RMuseum.Services
|
||||
/// <returns></returns>
|
||||
Task CacheCleanForComment(int commentId);
|
||||
|
||||
/// <summary>
|
||||
/// Get Verses By query
|
||||
/// </summary>
|
||||
/// <param name="query"></param>
|
||||
/// <param name="poetId"></param>
|
||||
/// <param name="pagingParameterModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorSearchVerseViewModel[] items)>> GetVersesByQuery(string query, int poetId,
|
||||
PagingParameterModel pagingParameterModel);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Search
|
||||
|
||||
@ -1129,7 +1129,7 @@ namespace RMuseum.Services.Implementation
|
||||
string plainText = "";
|
||||
foreach(GanjoorVerse verse in verses)
|
||||
{
|
||||
plainText += $"{verse.Text} ";
|
||||
plainText += $"{verse.Text}{Environment.NewLine}";
|
||||
}
|
||||
|
||||
poem.PlainText = plainText.Trim();
|
||||
|
||||
@ -1824,51 +1824,6 @@ namespace RMuseum.Services.Implementation
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// older search method
|
||||
/// </summary>
|
||||
/// <param name="query"></param>
|
||||
/// <param name="poetId"></param>
|
||||
/// <param name="paging"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<(PaginationMetadata PagingMeta, GanjoorSearchVerseViewModel[] items)>> GetVersesByQuery(string query, int poetId, PagingParameterModel paging)
|
||||
{
|
||||
try
|
||||
{
|
||||
var versesQ = _context.GanjoorVerses.AsNoTracking().Include(v => v.Poem).ThenInclude(p => p.Cat)
|
||||
.Where(v => v.Text.Contains(query));
|
||||
|
||||
if (poetId != 0)
|
||||
{
|
||||
versesQ = versesQ.Where(v => v.Poem.Cat.PoetId == poetId);
|
||||
}
|
||||
|
||||
var source = versesQ.Select(
|
||||
v => new GanjoorSearchVerseViewModel
|
||||
{
|
||||
Id = v.Id,
|
||||
VOrder = v.VOrder,
|
||||
VersePosition = v.VersePosition,
|
||||
Text = v.Text,
|
||||
PoemId = v.PoemId,
|
||||
PoetId = v.Poem.Cat.PoetId,
|
||||
PoemFullTitle = v.Poem.FullTitle,
|
||||
PoemFullUrl = v.Poem.FullUrl,
|
||||
}
|
||||
);
|
||||
|
||||
(PaginationMetadata PagingMeta, GanjoorSearchVerseViewModel[] Items) paginatedResult =
|
||||
await QueryablePaginator<GanjoorSearchVerseViewModel>.Paginate(source, paging);
|
||||
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, GanjoorSearchVerseViewModel[])>(paginatedResult);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<(PaginationMetadata PagingMeta, GanjoorSearchVerseViewModel[] Items)>((PagingMeta: null, Items: null), exp.ToString());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Similar Poems accroding to prosody and rhyme informations
|
||||
/// </summary>
|
||||
@ -1993,17 +1948,18 @@ namespace RMuseum.Services.Implementation
|
||||
string searchConditions;
|
||||
if(term.IndexOf('"') == 0 && term.LastIndexOf('"') == (term.Length - 1))
|
||||
{
|
||||
searchConditions = term;
|
||||
searchConditions = term.Replace("\"", "").Replace("'", "");
|
||||
searchConditions = $"\"*{term}*\"";
|
||||
}
|
||||
else
|
||||
{
|
||||
string[] words =term.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] words =term.Replace("\"", "").Replace("'", "").Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
searchConditions = "";
|
||||
string emptyOrAnd = "";
|
||||
foreach (string word in words)
|
||||
{
|
||||
searchConditions += $" {emptyOrAnd} \"{word}\" ";
|
||||
searchConditions += $" {emptyOrAnd} \"*{word}*\" ";
|
||||
emptyOrAnd = " AND ";
|
||||
}
|
||||
}
|
||||
@ -2216,6 +2172,79 @@ namespace RMuseum.Services.Implementation
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// separate verses in poem.PlainText with Environment.NewLine instead of SPACE
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public RServiceResult<bool> RegerneratePoemsPlainText()
|
||||
{
|
||||
try
|
||||
{
|
||||
_backgroundTaskQueue.QueueBackgroundWorkItem
|
||||
(
|
||||
async token =>
|
||||
{
|
||||
using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions<RMuseumDbContext>())) //this is long running job, so _context might be already been freed/collected by GC
|
||||
{
|
||||
LongRunningJobProgressServiceEF jobProgressServiceEF = new LongRunningJobProgressServiceEF(context);
|
||||
var job = (await jobProgressServiceEF.NewJob("RegerneratePoemsPlainText", "Query data")).Result;
|
||||
|
||||
try
|
||||
{
|
||||
var poems = await context.GanjoorPoems.ToArrayAsync();
|
||||
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 0, $"Updating PlainText");
|
||||
|
||||
int percent = 0;
|
||||
for (int i = 0; i < poems.Length; i++)
|
||||
{
|
||||
if (i * 100 / poems.Length > percent)
|
||||
{
|
||||
percent++;
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, percent);
|
||||
}
|
||||
|
||||
var poem = poems[i];
|
||||
|
||||
List<GanjoorVerse> verses = await context.GanjoorVerses.AsNoTracking().Where(v => v.PoemId == poem.Id).OrderBy(v => v.Id).ToListAsync();
|
||||
|
||||
string plainText = "";
|
||||
foreach (GanjoorVerse verse in verses)
|
||||
{
|
||||
plainText += $"{verse.Text}{Environment.NewLine}";
|
||||
}
|
||||
|
||||
poem.PlainText = plainText.Trim();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 0, $"Finalizing PlainText");
|
||||
|
||||
context.GanjoorPoems.UpdateRange(poems);
|
||||
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, exp.ToString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return new RServiceResult<bool>(true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<bool>(false, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// examine site pages for broken links
|
||||
/// </summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user