From 757cfcae8e91a5b7f1c78032398a6287055120b8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 26 Apr 2013 15:20:53 -0400 Subject: Added search hint service --- .../Library/LuceneSearchEngine.cs | 181 ++++++++++++++++++++- 1 file changed, 173 insertions(+), 8 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs') diff --git a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs index ed085c777..79ca1f554 100644 --- a/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs +++ b/MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Lucene.Net.Analysis.Standard; +using Lucene.Net.Analysis.Standard; using Lucene.Net.Documents; using Lucene.Net.Index; using Lucene.Net.QueryParsers; @@ -11,8 +6,13 @@ using Lucene.Net.Search; using Lucene.Net.Store; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Library { @@ -22,15 +22,22 @@ namespace MediaBrowser.Server.Implementations.Library /// public class LuceneSearchEngine : ILibrarySearchEngine, IDisposable { - public LuceneSearchEngine(IServerApplicationPaths serverPaths, ILogManager logManager) + private readonly ILibraryManager _libraryManager; + private readonly ILogger _logger; + + public LuceneSearchEngine(IServerApplicationPaths serverPaths, ILogManager logManager, ILibraryManager libraryManager) { + _libraryManager = libraryManager; + + _logger = logManager.GetLogger("Lucene"); + //string luceneDbPath = serverPaths.DataPath + "\\SearchIndexDB"; //if (!System.IO.Directory.Exists(luceneDbPath)) // System.IO.Directory.CreateDirectory(luceneDbPath); //else if(File.Exists(luceneDbPath + "\\write.lock")) // File.Delete(luceneDbPath + "\\write.lock"); - //LuceneSearch.Init(luceneDbPath, logManager.GetLogger("Lucene")); + //LuceneSearch.Init(luceneDbPath, _logger); //BaseItem.LibraryManager.LibraryChanged += LibraryChanged; } @@ -82,6 +89,164 @@ namespace MediaBrowser.Server.Implementations.Library //LuceneSearch.CloseAll(); } + + /// + /// Gets the search hints. + /// + /// The input items. + /// The search term. + /// IEnumerable{SearchHintResult}. + /// searchTerm + public async Task> GetSearchHints(IEnumerable inputItems, string searchTerm) + { + if (string.IsNullOrEmpty(searchTerm)) + { + throw new ArgumentNullException("searchTerm"); + } + + var hints = new List>(); + + var items = inputItems.Where(i => !(i is MusicArtist)).ToList(); + + foreach (var item in items) + { + var index = IndexOf(item.Name, searchTerm); + + if (index != -1) + { + hints.Add(new Tuple(item, index)); + } + } + + var artists = items.OfType