Implemented search result endpoint
This commit is contained in:
@@ -105,4 +105,27 @@ public class SearchdomainController : ControllerBase
|
|||||||
}
|
}
|
||||||
return Ok(new SearchdomainUpdateResults(){Success = true});
|
return Ok(new SearchdomainUpdateResults(){Success = true});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("GetSearches")]
|
||||||
|
public ActionResult<SearchdomainSearchesResults> GetSearches(string searchdomain)
|
||||||
|
{
|
||||||
|
Searchdomain searchdomain_;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
searchdomain_ = _domainManager.GetSearchdomain(searchdomain);
|
||||||
|
}
|
||||||
|
catch (SearchdomainNotFoundException)
|
||||||
|
{
|
||||||
|
_logger.LogError("Unable to retrieve the searchdomain {searchdomain} - it likely does not exist yet", [searchdomain]);
|
||||||
|
return Ok(new SearchdomainSearchesResults() { Searches = [], Success = false, Message = "Searchdomain not found" });
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError("Unable to retrieve the searchdomain {searchdomain} - {ex.Message} - {ex.StackTrace}", [searchdomain, ex.Message, ex.StackTrace]);
|
||||||
|
return Ok(new SearchdomainSearchesResults() { Searches = [], Success = false, Message = ex.Message });
|
||||||
|
}
|
||||||
|
Dictionary<string, DateTimedSearchResult> searchCache = searchdomain_.searchCache;
|
||||||
|
|
||||||
|
return Ok(new SearchdomainSearchesResults() { Searches = searchCache, Success = true });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
using MySqlX.XDevAPI.Common;
|
|
||||||
|
|
||||||
namespace Server.Models;
|
|
||||||
public readonly struct ResultItem(float score, string name)
|
|
||||||
{
|
|
||||||
public readonly float Score = score;
|
|
||||||
public readonly string Name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct DateTimedSearchResult
|
|
||||||
{
|
|
||||||
public List<DateTime> accessTimes;
|
|
||||||
public SearchResult Results;
|
|
||||||
}
|
|
||||||
|
|
||||||
public readonly struct SearchResult(List<ResultItem> results)
|
|
||||||
{
|
|
||||||
public readonly List<ResultItem> Results = results;
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,7 @@ using System.Data.Common;
|
|||||||
using ElmahCore.Mvc.Logger;
|
using ElmahCore.Mvc.Logger;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using Server.Helper;
|
using Server.Helper;
|
||||||
using Server.Models;
|
using Shared.Models;
|
||||||
|
|
||||||
namespace Server;
|
namespace Server;
|
||||||
|
|
||||||
@@ -155,8 +155,8 @@ public class Searchdomain
|
|||||||
{
|
{
|
||||||
if (searchCache.TryGetValue(query, out DateTimedSearchResult cachedResult))
|
if (searchCache.TryGetValue(query, out DateTimedSearchResult cachedResult))
|
||||||
{
|
{
|
||||||
cachedResult.accessTimes.Add(DateTime.Now);
|
cachedResult.AccessDateTimes.Add(DateTime.Now);
|
||||||
return [.. cachedResult.Results.Results.Select(r => (r.Score, r.Name))];
|
return [.. cachedResult.Results.Select(r => (r.Score, r.Name))];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!embeddingCache.TryGetValue(query, out Dictionary<string, float[]>? queryEmbeddings))
|
if (!embeddingCache.TryGetValue(query, out Dictionary<string, float[]>? queryEmbeddings))
|
||||||
@@ -188,15 +188,11 @@ public class Searchdomain
|
|||||||
result.Add((entity.probMethod(datapointProbs), entity.name));
|
result.Add((entity.probMethod(datapointProbs), entity.name));
|
||||||
}
|
}
|
||||||
List<(float, string)> results = [.. result.OrderByDescending(s => s.Item1)];
|
List<(float, string)> results = [.. result.OrderByDescending(s => s.Item1)];
|
||||||
SearchResult searchResult = new(
|
List<ResultItem> searchResult = new(
|
||||||
[.. results.Select(r =>
|
[.. results.Select(r =>
|
||||||
new ResultItem(r.Item1, r.Item2 ))]
|
new ResultItem(r.Item1, r.Item2 ))]
|
||||||
);
|
);
|
||||||
searchCache[query] = new DateTimedSearchResult
|
searchCache[query] = new DateTimedSearchResult(DateTime.Now, searchResult);
|
||||||
{
|
|
||||||
accessTimes = [DateTime.Now],
|
|
||||||
Results = searchResult
|
|
||||||
};
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
19
src/Shared/Models/SearchdomainModels.cs
Normal file
19
src/Shared/Models/SearchdomainModels.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace Shared.Models;
|
||||||
|
public readonly struct ResultItem(float score, string name)
|
||||||
|
{
|
||||||
|
[JsonPropertyName("Score")]
|
||||||
|
public readonly float Score { get; } = score;
|
||||||
|
[JsonPropertyName("Name")]
|
||||||
|
public readonly string Name { get; } = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct DateTimedSearchResult(DateTime dateTime, List<ResultItem> results)
|
||||||
|
{
|
||||||
|
[JsonPropertyName("AccessDateTimes")]
|
||||||
|
public List<DateTime> AccessDateTimes { get; set; } = [dateTime];
|
||||||
|
[JsonPropertyName("Results")]
|
||||||
|
public List<ResultItem> Results { get; set; } = results;
|
||||||
|
}
|
||||||
@@ -43,3 +43,14 @@ public class SearchdomainDeleteResults
|
|||||||
[JsonPropertyName("DeletedEntities")]
|
[JsonPropertyName("DeletedEntities")]
|
||||||
public required int DeletedEntities { get; set; }
|
public required int DeletedEntities { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class SearchdomainSearchesResults
|
||||||
|
{
|
||||||
|
[JsonPropertyName("Success")]
|
||||||
|
public required bool Success { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("Message")]
|
||||||
|
public string? Message { get; set; }
|
||||||
|
[JsonPropertyName("Searches")]
|
||||||
|
public required Dictionary<string, DateTimedSearchResult> Searches { get; set; }
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user