Was.OrcSearch – Rev 1

Subversion Repositories:
Rev:
using System.Collections.Generic;
using Lucene.Net.Analysis.Standard;
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;

namespace Was.OrcSearch.Services
{
    public class SearchQueryService : ISearchQueryService
    {
        public string GetSearchQuery(string filter, IEnumerable<ISearchableMetadata> searchableMetadatas)
        {
            if (!filter.Contains(":"))
            {
                filter = filter.PrepareOrcSearchFilter();

                using (var analyzer = new StandardAnalyzer(LuceneDefaults.Version))
                {
                    var fields = new List<string>();
                    foreach (var searchableMetadata in searchableMetadatas) fields.Add(searchableMetadata.SearchName);

                    var parser = new MultiFieldQueryParser(LuceneDefaults.Version, fields.ToArray(), analyzer);
                    var query = parser.Parse(filter);
                    filter = query.ToString();
                }
            }

            return filter;
        }

        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.