Was.OrcSearch – Blame information for rev 3

Subversion Repositories:
Rev:
Rev Author Line No. Line
3 office 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using Lucene.Net.Analysis;
1 office 5 using Lucene.Net.Index;
6 using Lucene.Net.QueryParsers;
7 using Lucene.Net.Search;
8 using Was.OrcSearch.Extensions;
9 using Was.OrcSearch.Metadata;
10 using Was.OrcSearch.Metadata.Interfaces;
11 using Was.OrcSearch.Services.Interfaces;
3 office 12 using Version = Lucene.Net.Util.Version;
1 office 13  
14 namespace Was.OrcSearch.Services
15 {
3 office 16 public class SearchQueryService : ISearchQueryService, IDisposable
1 office 17 {
3 office 18 private readonly Analyzer _analyzer;
19 private readonly Version _version = LuceneDefaults.Version;
20  
21 /// <summary>
22 /// Default constructor using a default whitespace analyzer.
23 /// </summary>
24 public SearchQueryService()
1 office 25 {
3 office 26 _analyzer = new WhitespaceAnalyzer();
27 }
1 office 28  
3 office 29 /// <summary>
30 /// Instantiate an analyzer using a specific Lucene version.
31 /// </summary>
32 /// <param name="analyzer">The analyzer to use.</param>
33 /// <param name="version">The lucene version.</param>
34 public SearchQueryService(Analyzer analyzer, Version version)
35 {
36 _version = version;
37 }
1 office 38  
3 office 39 /// <summary>
40 /// Instantiate a per-field analyzer.
41 /// </summary>
42 /// <param name="default">The default analyzer to use.</param>
43 /// <param name="fieldAnalyzers">A collection of fields to analyzers.</param>
44 public SearchQueryService(Analyzer @default, Dictionary<string, Analyzer> fieldAnalyzers)
45 {
46 _analyzer = new PerFieldAnalyzerWrapper(@default, fieldAnalyzers);
47 }
1 office 48  
3 office 49 public void Dispose()
50 {
51 _analyzer?.Dispose();
1 office 52 }
53  
3 office 54 public string GetSearchQuery(string filter, IEnumerable<ISearchableMetadata> searchableMetadatas)
55 {
56 if (filter.Contains(":"))
57 return filter;
58  
59 filter = filter.PrepareOrcSearchFilter();
60  
61 return new MultiFieldQueryParser(
62 _version,
63 searchableMetadatas
64 .Select(searchableMetadata => searchableMetadata.SearchName).ToArray(),
65 _analyzer)
66 .Parse(filter).ToString();
67 }
68  
1 office 69 public string GetSearchQuery(params ISearchableMetadataValue[] searchableMetadataValues)
70 {
71 var query = new PhraseQuery();
72  
73 foreach (var searchableMetadataValue in searchableMetadataValues)
74 query.Add(new Term(searchableMetadataValue.Metadata.SearchName, searchableMetadataValue.Value));
75  
76 var filter = query.ToString();
77  
78 return GetSearchQuery(filter, new SearchableMetadata[] { });
79 }
80 }
81 }