Files
Umbraco-CMS/src/Umbraco.Examine.Lucene/Extensions/ExamineExtensions.cs
Nikolaj Geisle 7688c61621 V10: fix build warnings Examine.Lucene (#12501)
* Run Code cleanup

* Dotnet format and manual pass

Co-authored-by: Nikolaj Geisle <niko737@edu.ucl.dk>
2022-06-20 08:19:19 +02:00

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;
}
}
}