Was.OrcSearch – Rev 3
?pathlinks?
using System;
using System.Collections.Generic;
using System.Linq;
using Lucene.Net.Analysis;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Was.OrcSearch.Extensions;
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
{
private readonly Analyzer _analyzer;
private readonly Version _version = LuceneDefaults.Version;
/// <summary>
/// Default constructor using a default whitespace analyzer.
/// </summary>
public SearchQueryService()
{
_analyzer = new WhitespaceAnalyzer();
}
/// <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;
}
/// <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);
}
public void Dispose()
{
_analyzer?.Dispose();
}
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();
foreach (var searchableMetadataValue in searchableMetadataValues)
query.Add(new Term(searchableMetadataValue.Metadata.SearchName, searchableMetadataValue.Value));
var filter = query.ToString();
return GetSearchQuery(filter, new SearchableMetadata[] { });
}
}
}
Generated by GNU Enscript 1.6.5.90.