* Run Code cleanup * Dotnet format and manual pass Co-authored-by: Nikolaj Geisle <niko737@edu.ucl.dk>
67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
// Copyright (c) Umbraco.
|
|
// See LICENSE for more details.
|
|
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using Examine;
|
|
using Examine.Lucene.Providers;
|
|
using Lucene.Net.Analysis.Core;
|
|
using Lucene.Net.QueryParsers.Classic;
|
|
using Lucene.Net.Search;
|
|
using Umbraco.Cms.Infrastructure.Examine;
|
|
|
|
namespace Umbraco.Extensions;
|
|
|
|
/// <summary>
|
|
/// Extension methods for the LuceneIndex
|
|
/// </summary>
|
|
public static class ExamineExtensions
|
|
{
|
|
internal static bool TryParseLuceneQuery(string query)
|
|
{
|
|
// TODO: I'd assume there would be a more strict way to parse the query but not that i can find yet, for now we'll
|
|
// also do this rudimentary check
|
|
if (!query.Contains(":"))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
//This will pass with a plain old string without any fields, need to figure out a way to have it properly parse
|
|
Query? parsed = new QueryParser(LuceneInfo.CurrentVersion, UmbracoExamineFieldNames.NodeNameFieldName, new KeywordAnalyzer()).Parse(query);
|
|
return true;
|
|
}
|
|
catch (ParseException)
|
|
{
|
|
return false;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Checks if the index can be read/opened
|
|
/// </summary>
|
|
/// <param name="indexer"></param>
|
|
/// <param name="ex">The exception returned if there was an error</param>
|
|
/// <returns></returns>
|
|
public static bool IsHealthy(this LuceneIndex indexer, [MaybeNullWhen(true)] out Exception ex)
|
|
{
|
|
try
|
|
{
|
|
using (indexer.IndexWriter.IndexWriter.GetReader(false))
|
|
{
|
|
ex = null;
|
|
return true;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
ex = e;
|
|
return false;
|
|
}
|
|
}
|
|
}
|