Was.OrcSearch – Blame information for rev 3
?pathlinks?
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 | } |