/Was.OrcSearch/Services/SearchQueryService.cs |
@@ -1,7 +1,5 @@ |
using System; |
using System.Collections.Generic; |
using System.Linq; |
using Lucene.Net.Analysis; |
using System.Collections.Generic; |
using Lucene.Net.Analysis.Standard; |
using Lucene.Net.Index; |
using Lucene.Net.QueryParsers; |
using Lucene.Net.Search; |
@@ -9,63 +7,31 @@ |
using Was.OrcSearch.Metadata; |
using Was.OrcSearch.Metadata.Interfaces; |
using Was.OrcSearch.Services.Interfaces; |
using Version = Lucene.Net.Util.Version; |
|
namespace Was.OrcSearch.Services |
{ |
public class SearchQueryService : ISearchQueryService, IDisposable |
public class SearchQueryService : ISearchQueryService |
{ |
private readonly Analyzer _analyzer; |
private readonly Version _version = LuceneDefaults.Version; |
|
/// <summary> |
/// Default constructor using a default whitespace analyzer. |
/// </summary> |
public SearchQueryService() |
public string GetSearchQuery(string filter, IEnumerable<ISearchableMetadata> searchableMetadatas) |
{ |
_analyzer = new WhitespaceAnalyzer(); |
} |
if (!filter.Contains(":")) |
{ |
filter = filter.PrepareOrcSearchFilter(); |
|
/// <summary> |
/// Instantiate an analyzer using a specific Lucene version. |
/// </summary> |
/// <param name="analyzer">The analyzer to use.</param> |
/// <param name="version">The lucene version.</param> |
public SearchQueryService(Analyzer analyzer, Version version) |
{ |
_version = version; |
} |
using (var analyzer = new StandardAnalyzer(LuceneDefaults.Version)) |
{ |
var fields = new List<string>(); |
foreach (var searchableMetadata in searchableMetadatas) fields.Add(searchableMetadata.SearchName); |
|
/// <summary> |
/// Instantiate a per-field analyzer. |
/// </summary> |
/// <param name="default">The default analyzer to use.</param> |
/// <param name="fieldAnalyzers">A collection of fields to analyzers.</param> |
public SearchQueryService(Analyzer @default, Dictionary<string, Analyzer> fieldAnalyzers) |
{ |
_analyzer = new PerFieldAnalyzerWrapper(@default, fieldAnalyzers); |
} |
var parser = new MultiFieldQueryParser(LuceneDefaults.Version, fields.ToArray(), analyzer); |
var query = parser.Parse(filter); |
filter = query.ToString(); |
} |
} |
|
public void Dispose() |
{ |
_analyzer?.Dispose(); |
return filter; |
} |
|
public string GetSearchQuery(string filter, IEnumerable<ISearchableMetadata> searchableMetadatas) |
{ |
if (filter.Contains(":")) |
return filter; |
|
filter = filter.PrepareOrcSearchFilter(); |
|
return new MultiFieldQueryParser( |
_version, |
searchableMetadatas |
.Select(searchableMetadata => searchableMetadata.SearchName).ToArray(), |
_analyzer) |
.Parse(filter).ToString(); |
} |
|
public string GetSearchQuery(params ISearchableMetadataValue[] searchableMetadataValues) |
{ |
var query = new PhraseQuery(); |