Was.OrcSearch – Diff between revs 1 and 3
?pathlinks?
Rev 1 | Rev 3 | |||
---|---|---|---|---|
Line -... | Line 1... | |||
- | 1 | using System; |
||
1 | using System.Collections.Generic; |
2 | using System.Collections.Generic; |
|
- | 3 | using System.Linq; |
||
2 | using Lucene.Net.Analysis.Standard; |
4 | using Lucene.Net.Analysis; |
|
3 | using Lucene.Net.Index; |
5 | using Lucene.Net.Index; |
|
4 | using Lucene.Net.QueryParsers; |
6 | using Lucene.Net.QueryParsers; |
|
5 | using Lucene.Net.Search; |
7 | using Lucene.Net.Search; |
|
6 | using Was.OrcSearch.Extensions; |
8 | using Was.OrcSearch.Extensions; |
|
7 | using Was.OrcSearch.Metadata; |
9 | using Was.OrcSearch.Metadata; |
|
8 | using Was.OrcSearch.Metadata.Interfaces; |
10 | using Was.OrcSearch.Metadata.Interfaces; |
|
9 | using Was.OrcSearch.Services.Interfaces; |
11 | using Was.OrcSearch.Services.Interfaces; |
|
- | 12 | using Version = Lucene.Net.Util.Version; |
||
Line 10... | Line 13... | |||
10 | |
13 | |
|
11 | namespace Was.OrcSearch.Services |
14 | namespace Was.OrcSearch.Services |
|
12 | { |
15 | { |
|
13 | public class SearchQueryService : ISearchQueryService |
16 | public class SearchQueryService : ISearchQueryService, IDisposable |
|
- | 17 | { |
||
- | 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() |
||
- | 25 | { |
||
- | 26 | _analyzer = new WhitespaceAnalyzer(); |
||
- | 27 | } |
||
- | 28 | |
||
- | 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 | } |
||
- | 38 | |
||
- | 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 | } |
||
- | 48 | |
||
- | 49 | public void Dispose() |
||
- | 50 | { |
||
- | 51 | _analyzer?.Dispose(); |
||
- | 52 | } |
||
14 | { |
53 | |
|
15 | public string GetSearchQuery(string filter, IEnumerable<ISearchableMetadata> searchableMetadatas) |
54 | public string GetSearchQuery(string filter, IEnumerable<ISearchableMetadata> searchableMetadatas) |
|
16 | { |
55 | { |
|
17 | if (!filter.Contains(":")) |
- | ||
18 | { |
- | ||
19 | filter = filter.PrepareOrcSearchFilter(); |
- | ||
20 | |
- | ||
21 | using (var analyzer = new StandardAnalyzer(LuceneDefaults.Version)) |
56 | if (filter.Contains(":")) |
|
22 | { |
- | ||
23 | var fields = new List<string>(); |
- | ||
24 | foreach (var searchableMetadata in searchableMetadatas) fields.Add(searchableMetadata.SearchName); |
57 | return filter; |
|
25 | |
- | ||
26 | var parser = new MultiFieldQueryParser(LuceneDefaults.Version, fields.ToArray(), analyzer); |
58 | |
|
27 | var query = parser.Parse(filter); |
- | ||
28 | filter = query.ToString(); |
- | ||
29 | } |
- | ||
Line -... | Line 59... | |||
- | 59 | filter = filter.PrepareOrcSearchFilter(); |
||
- | 60 | |
||
- | 61 | return new MultiFieldQueryParser( |
||
- | 62 | _version, |
||
30 | } |
63 | searchableMetadatas |
|
- | 64 | .Select(searchableMetadata => searchableMetadata.SearchName).ToArray(), |
||
31 | |
65 | _analyzer) |
|
Line 32... | Line 66... | |||
32 | return filter; |
66 | .Parse(filter).ToString(); |
|
33 | } |
67 | } |
|
34 | |
68 | |