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))); }