public ActionResult KeywordSearch(string term)
        {
            Analyzer analyzer = new ASCIIFoldingAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

            // Perform a search
            var searcher   = getSearcher();
            var hits_limit = 10;

            BooleanQuery finalQuery = new BooleanQuery();

            finalQuery.Add(getPrefixQuery(term, analyzer), Occur.SHOULD);
            searcher.SetDefaultFieldSortScoring(true, true);

            ScoreDoc[] hits      = searcher.Search(finalQuery, null, hits_limit, Sort.RELEVANCE).ScoreDocs;
            ScoreDoc[] fuzzyHits = searcher.Search(getFuzzyQuery(term, analyzer), null, hits_limit, Sort.RELEVANCE).ScoreDocs;

            List <ScoreDoc> scoreDocs = new List <ScoreDoc>();

            scoreDocs.AddRange(hits);
            if (hits.Length < 10)
            {
                scoreDocs.AddRange(fuzzyHits);
            }

            List <String> searchResults = new List <String>();

            foreach (ScoreDoc hit in scoreDocs)
            {
                var document = searcher.IndexReader.Document(hit.Doc);
                searchResults.Add(document.Get(Constants.TITLE_FIELD) + " par " + document.Get(Constants.ARTIST_FIELD));
            }
            return(Json(searchResults.ToArray().Take(10)));
        }
        public ActionResult ArtistSearch(string term)
        {
            Analyzer analyzer   = new ASCIIFoldingAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
            var      hits_limit = 5000;

            BooleanQuery  finalQuery = getPrefixQuery(Constants.ARTIST_FIELD, 3, term, analyzer);
            IndexSearcher searcher   = getSearcher();

            searcher.SetDefaultFieldSortScoring(true, true);
            ScoreDoc[] hits      = searcher.Search(finalQuery, null, hits_limit, Sort.RELEVANCE).ScoreDocs;
            ScoreDoc[] fuzzyHits = searcher.Search(getFuzzyQuery(Constants.ARTIST_FIELD, term, analyzer),
                                                   null, hits_limit, Sort.RELEVANCE).ScoreDocs;

            List <String> searchResults = new List <String>();

            foreach (ScoreDoc hit in hits)
            {
                var    document = searcher.IndexReader.Document(hit.Doc);
                string artist   = document.Get(Constants.ARTIST_FIELD);
                if (!searchResults.Contains(artist))
                {
                    searchResults.Add(document.Get(Constants.ARTIST_FIELD));
                }
            }

            foreach (ScoreDoc hit in fuzzyHits)
            {
                var    document = searcher.IndexReader.Document(hit.Doc);
                string artist   = document.Get(Constants.ARTIST_FIELD);
                if (!searchResults.Contains(artist))
                {
                    searchResults.Add(document.Get(Constants.ARTIST_FIELD));
                }
            }

            searcher.Dispose();
            return(Json(searchResults.ToArray().Take(10)));
        }