Browse Source

index added date (#601)

pull/603/head
Jason Dove 4 years ago committed by GitHub
parent
commit
5f6043e593
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      CHANGELOG.md
  2. 15
      ErsatzTV.Infrastructure/Search/CustomMultiFieldQueryParser.cs
  3. 15
      ErsatzTV.Infrastructure/Search/CustomQueryParser.cs
  4. 19
      ErsatzTV.Infrastructure/Search/SearchIndex.cs

4
CHANGELOG.md

@ -18,6 +18,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Added ### Added
- Hide console window on macOS; tray menu can be used to access UI, logs and to stop the app - Hide console window on macOS; tray menu can be used to access UI, logs and to stop the app
- Also write logs to text files in the `logs` config subfolder - Also write logs to text files in the `logs` config subfolder
- Add `added_date` to search index
- This requires rebuilding the search index and search results may be empty or incomplete until the rebuild is complete
- Add `added_inthelast`, `added_notinthelast` search field for relative added date queries
- Syntax is a number and a unit (days, weeks, months, years) like `1 week` or `2 years`
## [0.3.8-alpha] - 2022-01-23 ## [0.3.8-alpha] - 2022-01-23
### Fixed ### Fixed

15
ErsatzTV.Infrastructure/Search/CustomMultiFieldQueryParser.cs

@ -60,6 +60,21 @@ namespace ErsatzTV.Infrastructure.Search
return base.GetRangeQuery("release_date", "00000000", dateString, false, false); return base.GetRangeQuery("release_date", "00000000", dateString, false, false);
} }
if (field == "added_inthelast" && CustomQueryParser.ParseStart(queryText, out DateTime addedStart))
{
var todayString = DateTime.Today.ToString("yyyyMMdd");
var dateString = addedStart.ToString("yyyyMMdd");
return base.GetRangeQuery("added_date", dateString, todayString, true, true);
}
if (field == "added_notinthelast" && CustomQueryParser.ParseStart(queryText, out DateTime addedFinish))
{
var dateString = addedFinish.ToString("yyyyMMdd");
return base.GetRangeQuery("added_date", "00000000", dateString, false, false);
}
return base.GetFieldQuery(field, queryText, slop); return base.GetFieldQuery(field, queryText, slop);
} }

15
ErsatzTV.Infrastructure/Search/CustomQueryParser.cs

@ -57,6 +57,21 @@ namespace ErsatzTV.Infrastructure.Search
return base.GetRangeQuery("release_date", "00000000", dateString, false, false); return base.GetRangeQuery("release_date", "00000000", dateString, false, false);
} }
if (field == "added_inthelast" && ParseStart(queryText, out DateTime addedStart))
{
var todayString = DateTime.Today.ToString("yyyyMMdd");
var dateString = addedStart.ToString("yyyyMMdd");
return base.GetRangeQuery("added_date", dateString, todayString, true, true);
}
if (field == "added_notinthelast" && ParseStart(queryText, out DateTime addedFinish))
{
var dateString = addedFinish.ToString("yyyyMMdd");
return base.GetRangeQuery("added_date", "00000000", dateString, false, false);
}
return base.GetFieldQuery(field, queryText, slop); return base.GetFieldQuery(field, queryText, slop);
} }

19
ErsatzTV.Infrastructure/Search/SearchIndex.cs

@ -43,6 +43,7 @@ namespace ErsatzTV.Infrastructure.Search
private const string TitleAndYearField = "title_and_year"; private const string TitleAndYearField = "title_and_year";
private const string JumpLetterField = "jump_letter"; private const string JumpLetterField = "jump_letter";
private const string ReleaseDateField = "release_date"; private const string ReleaseDateField = "release_date";
private const string AddedDateField = "added_date";
private const string StudioField = "studio"; private const string StudioField = "studio";
private const string LanguageField = "language"; private const string LanguageField = "language";
private const string StyleField = "style"; private const string StyleField = "style";
@ -80,7 +81,7 @@ namespace ErsatzTV.Infrastructure.Search
_initialized = false; _initialized = false;
} }
public int Version => 19; public int Version => 20;
public Task<bool> Initialize(ILocalFileSystem localFileSystem) public Task<bool> Initialize(ILocalFileSystem localFileSystem)
{ {
@ -342,6 +343,8 @@ namespace ErsatzTV.Infrastructure.Search
Field.Store.NO)); Field.Store.NO));
} }
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
if (!string.IsNullOrWhiteSpace(metadata.Plot)) if (!string.IsNullOrWhiteSpace(metadata.Plot))
{ {
doc.Add(new TextField(PlotField, metadata.Plot ?? string.Empty, Field.Store.NO)); doc.Add(new TextField(PlotField, metadata.Plot ?? string.Empty, Field.Store.NO));
@ -468,6 +471,8 @@ namespace ErsatzTV.Infrastructure.Search
Field.Store.NO)); Field.Store.NO));
} }
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
if (!string.IsNullOrWhiteSpace(metadata.Plot)) if (!string.IsNullOrWhiteSpace(metadata.Plot))
{ {
doc.Add(new TextField(PlotField, metadata.Plot ?? string.Empty, Field.Store.NO)); doc.Add(new TextField(PlotField, metadata.Plot ?? string.Empty, Field.Store.NO));
@ -558,6 +563,8 @@ namespace ErsatzTV.Infrastructure.Search
Field.Store.NO)); Field.Store.NO));
} }
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
foreach (TraktListItem item in season.TraktListItems) foreach (TraktListItem item in season.TraktListItems)
{ {
doc.Add(new StringField(TraktListField, item.TraktList.TraktId.ToString(), Field.Store.NO)); doc.Add(new StringField(TraktListField, item.TraktList.TraktId.ToString(), Field.Store.NO));
@ -597,6 +604,8 @@ namespace ErsatzTV.Infrastructure.Search
List<string> languages = await searchRepository.GetLanguagesForArtist(artist); List<string> languages = await searchRepository.GetLanguagesForArtist(artist);
await AddLanguages(searchRepository, doc, languages); await AddLanguages(searchRepository, doc, languages);
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
foreach (Genre genre in metadata.Genres) foreach (Genre genre in metadata.Genres)
{ {
doc.Add(new TextField(GenreField, genre.Name, Field.Store.NO)); doc.Add(new TextField(GenreField, genre.Name, Field.Store.NO));
@ -659,6 +668,8 @@ namespace ErsatzTV.Infrastructure.Search
metadata.ReleaseDate.Value.ToString("yyyyMMdd"), metadata.ReleaseDate.Value.ToString("yyyyMMdd"),
Field.Store.NO)); Field.Store.NO));
} }
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
if (!string.IsNullOrWhiteSpace(metadata.Album)) if (!string.IsNullOrWhiteSpace(metadata.Album))
{ {
@ -748,6 +759,8 @@ namespace ErsatzTV.Infrastructure.Search
metadata.ReleaseDate.Value.ToString("yyyyMMdd"), metadata.ReleaseDate.Value.ToString("yyyyMMdd"),
Field.Store.NO)); Field.Store.NO));
} }
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
if (!string.IsNullOrWhiteSpace(metadata.Plot)) if (!string.IsNullOrWhiteSpace(metadata.Plot))
{ {
@ -827,6 +840,8 @@ namespace ErsatzTV.Infrastructure.Search
{ {
doc.Add(new Int32Field(MinutesField, (int)Math.Ceiling(version.Duration.TotalMinutes), Field.Store.NO)); doc.Add(new Int32Field(MinutesField, (int)Math.Ceiling(version.Duration.TotalMinutes), Field.Store.NO));
} }
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
foreach (Tag tag in metadata.Tags) foreach (Tag tag in metadata.Tags)
{ {
@ -871,6 +886,8 @@ namespace ErsatzTV.Infrastructure.Search
{ {
doc.Add(new Int32Field(MinutesField, (int)Math.Ceiling(version.Duration.TotalMinutes), Field.Store.NO)); doc.Add(new Int32Field(MinutesField, (int)Math.Ceiling(version.Duration.TotalMinutes), Field.Store.NO));
} }
doc.Add(new StringField(AddedDateField, metadata.DateAdded.ToString("yyyyMMdd"), Field.Store.NO));
if (!string.IsNullOrWhiteSpace(metadata.Album)) if (!string.IsNullOrWhiteSpace(metadata.Album))
{ {

Loading…
Cancel
Save