Esempio n. 1
0
        public static void OptimizeLuceneIndex()
        {
            //var analyzer = new StandardAnalyzer(Version.LUCENE_30);
            var analyzer = SearcherBase.GetAnalyzer();

            using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                analyzer.Close();
                writer.Optimize();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 按id清楚
        /// </summary>
        /// <param name="recordId"></param>
        public static void ClearLuceneIndexRecord(int recordId)
        {
            //var analyzer = new StandardAnalyzer(Version.LUCENE_30);
            var analyzer = SearcherBase.GetAnalyzer();

            using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                var searchQuery = new TermQuery(new Term("Id", recordId.ToString()));
                writer.DeleteDocuments(searchQuery);

                analyzer.Close();
            }
        }
Esempio n. 3
0
        public static void UpdateLuceneIndex(IEnumerable <Article> data)
        {
            //var analyzer = new StandardAnalyzer(Version.LUCENE_30);
            var analyzer = SearcherBase.GetAnalyzer();

            using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                // replaces older entry if any
                foreach (var sd in data)
                {
                    AddToLuceneIndex(sd, writer);
                }

                analyzer.Close();
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 清楚全部
        /// </summary>
        /// <returns></returns>
        public static bool ClearLuceneIndex()
        {
            try
            {
                //var analyzer = new StandardAnalyzer(Version.LUCENE_30);
                var analyzer = SearcherBase.GetAnalyzer();
                using (var writer = new IndexWriter(SearcherBase.Directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED))
                {
                    writer.DeleteAll();

                    analyzer.Close();
                }
            }
            catch (Exception e)
            {
                return(false);
            }

            return(true);
        }
Esempio n. 5
0
        private static IEnumerable <Article> SearchQuery(string searchQuery, int pageIndex, int pageSize, string searchField = "")
        {
            if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", "")))
            {
                return(new List <Article>());
            }

            using (var searcher = new IndexSearcher(SearcherBase.Directory, false))
            {
                var hitsLimit = 1000;
                //var analyzer = new StandardAnalyzer(Version.LUCENE_30);
                var analyzer = SearcherBase.GetAnalyzer();

                if (!string.IsNullOrEmpty(searchField))
                {
                    var parser = new QueryParser(Version.LUCENE_30, searchField, analyzer);
                    var query  = ParseQuery(searchQuery, parser);
                    var hits   = searcher.Search(query, hitsLimit).ScoreDocs;
                    hits = hits.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToArray();
                    var results = MapLuceneToDataList(hits, searcher);
                    analyzer.Dispose();
                    return(results);
                }
                else
                {
                    var parser = new MultiFieldQueryParser(Version.LUCENE_30, new[] { "Id", "Title", "Description", "Time", "Browses", "Category", "UserId" }, analyzer);
                    var query  = ParseQuery(searchQuery, parser);
                    var hits   = searcher.Search(query, null, hitsLimit, Sort.RELEVANCE).ScoreDocs;
                    hits = hits.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToArray();
                    var results = MapLuceneToDataList(hits, searcher);
                    foreach (var item in results)
                    {
                        item.Description = SearcherBase.SimpleHighLighter(item.Description, searchQuery, "<font color='#C60A00'>", "</font>", 226);
                    }
                    analyzer.Close();
                    return(results);
                }
            }
        }