Browse Source

fix many search queries (#1648)

pull/1649/head
Jason Dove 2 years ago committed by GitHub
parent
commit
923b36604c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 2
      ErsatzTV.Infrastructure/Search/ElasticSearchIndex.cs
  3. 24
      ErsatzTV.Infrastructure/Search/LuceneSearchIndex.cs

1
CHANGELOG.md

@ -49,6 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -49,6 +49,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fix some stream failures caused by loudnorm filter
- Fix multi-collection editor improperly disabling collections/smart collections that haven't already been added to the multi-collection
- Fix path replacement logic when media server paths use inconsistent casing (e.g. `\\SERVERNAME` AND `\\ServerName`)
- Fix *many* search queries, including actors with the name `Will`
### Changed
- Log search index updates under scanner category at debug level, to indicate a potential cause for the UI being out of date

2
ErsatzTV.Infrastructure/Search/ElasticSearchIndex.cs

@ -162,7 +162,7 @@ public class ElasticSearchIndex : ISearchIndex @@ -162,7 +162,7 @@ public class ElasticSearchIndex : ISearchIndex
var items = new List<MinimalElasticSearchItem>();
var totalCount = 0;
Query parsedQuery = LuceneSearchIndex.ParseQuery(query, false);
Query parsedQuery = LuceneSearchIndex.ParseQuery(query);
SearchResponse<MinimalElasticSearchItem> response = await _client.SearchAsync<MinimalElasticSearchItem>(
s => s.Index(IndexName)

24
ErsatzTV.Infrastructure/Search/LuceneSearchIndex.cs

@ -1372,22 +1372,24 @@ public sealed class LuceneSearchIndex : ISearchIndex @@ -1372,22 +1372,24 @@ public sealed class LuceneSearchIndex : ISearchIndex
doc.Get(TypeField, CultureInfo.InvariantCulture),
Convert.ToInt32(doc.Get(IdField, CultureInfo.InvariantCulture), CultureInfo.InvariantCulture));
internal static Query ParseQuery(string query, bool useCustomAnalyzers = true)
internal static Query ParseQuery(string query)
{
using var analyzer = new StandardAnalyzer(AppLuceneVersion);
var customAnalyzers = new Dictionary<string, Analyzer>();
if (useCustomAnalyzers)
using var analyzer = new SimpleAnalyzer(AppLuceneVersion);
var customAnalyzers = new Dictionary<string, Analyzer>
{
customAnalyzers.Add(ShowContentRatingField, new KeywordAnalyzer());
customAnalyzers.Add(ContentRatingField, new KeywordAnalyzer());
customAnalyzers.Add(StateField, new KeywordAnalyzer());
}
{ ShowContentRatingField, new KeywordAnalyzer() },
{ ContentRatingField, new KeywordAnalyzer() },
{ StateField, new KeywordAnalyzer() },
{ PlotField, new StandardAnalyzer(AppLuceneVersion) }
};
using var analyzerWrapper = new PerFieldAnalyzerWrapper(analyzer, customAnalyzers);
QueryParser parser = new CustomMultiFieldQueryParser(AppLuceneVersion, [TitleField], analyzerWrapper);
parser.AllowLeadingWildcard = true;
return ParseQuery(query, parser);
Query result = ParseQuery(query, parser);
Serilog.Log.Logger.Debug("Search query parsed from [{Query}] to [{ParsedQuery}]", query, result.ToString());
return result;
}
private static Query ParseQuery(string searchQuery, QueryParser parser)

Loading…
Cancel
Save