Files
ersatztv/ErsatzTV.Core/Interfaces/Search/ISearchIndex.cs
T
timothyandClaude Opus 4.8 b4ae0bde18 feat(434): distinct-values search endpoint (text fields, Lucene term enumeration)
Adds GET /api/v1/search/fields/{name}/values?q=&limit= — the backend slice of the
visual rule builder's facet-value typeahead (#434). Enumerates distinct Lucene term
values for a text field via MultiFields.GetTerms + TermsEnum, filtered by a
case-insensitive prefix, limit clamped to [1,50]. 404s when the field is absent from
SearchFieldCatalog or is not type "text". ElasticSearchIndex (the optional external
backend) throws NotSupportedException for this method — its text fields are analyzed,
not keyword-mapped, so a terms aggregation isn't safe to guess at without verifying
against a live cluster.

Regenerated OpenAPI trio (v1.json, v1.d.ts, endpoint-index.md).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 20:43:27 +02:00

58 lines
1.7 KiB
C#

using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Search;
namespace ErsatzTV.Core.Interfaces.Search;
public interface ISearchIndex : IDisposable
{
int Version { get; }
Task<bool> IndexExists();
Task<bool> Initialize(
ILocalFileSystem localFileSystem,
IConfigElementRepository configElementRepository,
CancellationToken cancellationToken);
Task<Unit> Rebuild(
ISearchRepository searchRepository,
IFallbackMetadataProvider fallbackMetadataProvider,
ILanguageCodeService languageCodeService,
CancellationToken cancellationToken);
Task<Unit> RebuildItems(
ISearchRepository searchRepository,
IFallbackMetadataProvider fallbackMetadataProvider,
ILanguageCodeService languageCodeService,
IEnumerable<int> itemIds,
CancellationToken cancellationToken);
Task<Unit> UpdateItems(
ISearchRepository searchRepository,
IFallbackMetadataProvider fallbackMetadataProvider,
ILanguageCodeService languageCodeService,
List<MediaItem> items);
Task<bool> RemoveItems(IEnumerable<int> ids);
Task<List<string>> GetFieldValues(string field, string query, int limit);
Task<SearchResult> Search(
string query,
string smartCollectionName,
int skip,
int limit,
CancellationToken cancellationToken);
Task<SearchResult> Search(
string query,
string smartCollectionName,
int skip,
int limit,
List<string> defaultFields,
CancellationToken cancellationToken);
void Commit();
}