public IEnumerable <Service> Execute(ISession session)
        {
            var serviceType   = typeof(Service);
            var dq            = new DistanceQueryBuilder(_userLocation.Y, _userLocation.X, _distance * MeterInMiles, "Location_Latitude", "Location_Longitude", CartesianTierPlotter.DefaltFieldPrefix, false);
            var metaTermQuery = new TermQuery(new Term("metafile", "doc"));

            var  dsort = new DistanceFieldComparatorSource(dq.DistanceFilter);
            Sort sort  = new Sort(new SortField("Location", dsort, false));

            var booleanQuery = new BooleanQuery();

            booleanQuery.Add(metaTermQuery, BooleanClause.Occur.SHOULD);

            if (!string.IsNullOrWhiteSpace(_searchModel.Terms))
            {
                var analyzer    = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
                var queryParser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, new[] { "Title", "Body", "Category_Name" }, analyzer);
                var termQuery   = queryParser.Parse(_searchModel.Terms);

                booleanQuery.Add(termQuery, BooleanClause.Occur.MUST);
            }

            if (_searchModel.CategoryId != null)
            {
                var categoryQuery = new TermQuery(new Term("Category_Id", _searchModel.CategoryId.Value.ToString()));
                booleanQuery.Add(categoryQuery, BooleanClause.Occur.MUST);
            }

            if (_searchModel.Type != null)
            {
                if (_searchModel.Type.Value == (byte)ServiceType.Offering)
                {
                    serviceType = typeof(ServiceOffering);
                }
                else if (_searchModel.Type.Value == (byte)ServiceType.Request)
                {
                    serviceType = typeof(ServiceRequest);
                }
            }

            return(session.FullTextSession().CreateFullTextQuery(booleanQuery, serviceType)
                   .SetFilter(dq.Filter).SetFetchSize(PageSize).List <Service>());
        }
Beispiel #2
0
        /// <summary>
        /// 创建对象字段的分析器
        /// </summary>
        /// <returns></returns>
        private PerFieldAnalyzerWrapper CreateAnalyzerWrapper()
        {
            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
            PerFieldAnalyzerWrapper analyzerWrapper = new PerFieldAnalyzerWrapper(analyzer);

            foreach (var item in Properties)
            {
                AnalyzedAttribute attr = item.GetCustomAttribute <AnalyzedAttribute>();
                if (attr != null && attr.IsAnalyzed)
                {
                    analyzerWrapper.AddAnalyzer(item.Name, new PanGuAnalyzer());
                }
                else
                {
                    analyzerWrapper.AddAnalyzer(item.Name, analyzer);
                }
            }
            return(analyzerWrapper);
        }
Beispiel #3
0
        public static void AddUpdateLuceneIndex(IEnumerable <CMSContent> cmsContents)
        {
            // init lucene
            var analyzer = new StandardAnalyzer(Version.LUCENE_29);

            using (var writer = new IndexWriter(_directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                // add data to lucene search index (replaces older entries if any)
                foreach (var cmsContent in cmsContents)
                {
                    _addToLuceneIndex(cmsContent, writer);
                }

                // close handles
                analyzer.Close();
                writer.Close();
                writer.Dispose();
            }
        }
Beispiel #4
0
        private static void Indeksleme(ld.Directory indeksYolu)
        {
            Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

            using (analyzer)
            {
                var indeksYazici = new IndexWriter(indeksYolu, analyzer, IndexWriter.MaxFieldLength.UNLIMITED);

                using (SqlConnection sqlConn = new SqlConnection())
                {
                    sqlConn.ConnectionString = cnnstr;
                    sqlConn.Open();
                    SqlCommand    cmd = new SqlCommand("Select Id,Name From DocumentFeaturesStatic", sqlConn);
                    SqlDataReader oku = cmd.ExecuteReader();


                    DateTime indexBaslangic = DateTime.Now;
                    Console.WriteLine("İndeksleme başlıyor => " + indexBaslangic);

                    while (oku.Read())
                    {
                        Console.WriteLine(oku["Id"]);
                        Console.WriteLine(oku["Name"]);

                        var doc = new Document();
                        doc.Add(new Field("Id", oku["Id"].ToString(), Field.Store.YES, Field.Index.NO));
                        // Id' kolonu dökümanda yer alsın ama indekslenmesin diyoruz

                        doc.Add(new Field("Name", oku["Name"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                        //ProductName kolonu indekslensin

                        indeksYazici.AddDocument(doc);
                    }
                    indeksYazici.Optimize();
                    indeksYazici.Commit();
                    DateTime indexBitis = DateTime.Now;
                    Console.WriteLine("İndeksleme bitti => " + indexBitis);
                    Console.WriteLine("Süre: " + (indexBitis - indexBaslangic));
                    Console.WriteLine("İndekslenen döküman sayısı: " + indeksYazici.GetDocCount(0));
                    indeksYazici.Close();
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Searches log items.
        /// </summary>
        /// <param name="request">Search request.</param>
        /// <returns>
        /// Returns a search result.
        /// </returns>
        public SearchResult Search(SearchRequest request)
        {
            if (IsIndexExisted)
            {
                using (var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
                {
                    using (var searcher = new IndexSearcher(IndexDirectory, true))
                    {
                        var query = new BooleanQuery();

                        if (!request.IsQueryEmpty)
                        {
                            var parser       = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Message", analyzer);
                            var contentQuery = parser.Parse(request.Query);
                            query.Add(contentQuery, Occur.MUST);
                        }
                        else
                        {
                            query.Add(new MatchAllDocsQuery(), Occur.MUST);
                        }

                        var filter = new QueryWrapperFilter(query);

                        var order     = GetOrderByOrDefault(request.OrderBy);
                        var hits      = searcher.Search(query, filter, 500000, order);
                        var limitDocs = hits.ScoreDocs.Skip(request.Offset).Take(request.Limit);
                        List <LogEventData> results = new List <LogEventData>(hits.TotalHits);
                        foreach (var scoreDoc in limitDocs)
                        {
                            var doc      = searcher.Doc(scoreDoc.Doc);
                            var raw      = doc.Get("Raw");
                            var logEvent = JsonConvert.DeserializeObject <LogEventData>(raw);
                            results.Add(logEvent);
                        }
                        return(new SearchResult(results, hits.TotalHits));
                    }
                }
            }
            else
            {
                return(SearchResult.Empty);
            }
        }
Beispiel #6
0
        public static void AddUpdateLuceneIndex(IEnumerable <Character> characters)
        {
            // init lucene

            var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

            using (var writer = new IndexWriter(_directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                // add data to lucene search index (replaces older entry if any)
                foreach (var character in characters)
                {
                    _addToLuceneIndex(character, writer);
                }

                // close handles
                analyzer.Close();
                writer.Dispose();
            }
        }
        /// <summary>
        /// 批量删除数据的索引
        /// </summary>
        /// <param name="jobList"></param>
        public void DeleteIndexMuti(List <Bpo_JobEntity> jobList, string rootIndexPath)
        {
            if (jobList == null || jobList.Count == 0)
            {
                return;
            }
            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

            System.IO.DirectoryInfo dirInfo   = System.IO.Directory.CreateDirectory(rootIndexPath);
            FSDirectory             directory = FSDirectory.Open(dirInfo);

            using (IndexReader reader = IndexReader.Open(directory, false))
            {
                foreach (Bpo_JobEntity job in jobList)
                {
                    reader.DeleteDocuments(new Term("Id", job.Id.ToString()));
                }
            }
        }
Beispiel #8
0
        private static IEnumerable <MovieSearchData> _search(string searchQuery, string searchField = "")
        {
            // validation
            if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", "")))
            {
                return(new List <MovieSearchData>());
            }

            if (!System.IO.Directory.Exists(_directory.Directory.FullName))
            {
                return(new List <MovieSearchData>());
            }

            // set up lucene searcher
            using (var searcher = new IndexSearcher(_directory, false))
            {
                var hits_limit = 10;
                using (var analyzer = new StandardAnalyzer(Version.LUCENE_30))
                {
                    //var analyzer = new WhitespaceAnalyzer();

                    // search by single field
                    if (!string.IsNullOrEmpty(searchField))
                    {
                        var parser  = new QueryParser(Version.LUCENE_30, searchField, analyzer);
                        var query   = parseQuery(searchQuery, parser);
                        var hits    = searcher.Search(query, hits_limit).ScoreDocs;
                        var results = _mapLuceneToDataList(hits, searcher);
                        return(results);
                    }
                    // search by multiple fields (ordered by RELEVANCE)
                    else
                    {
                        //var parser = new MultiFieldQueryParser(Version.LUCENE_30, new[] { "Id", "Title", "UniqueName", "TitleImageURL", "Type", "Link", "Description" }, analyzer);
                        var parser  = new MultiFieldQueryParser(Version.LUCENE_30, new[] { "Id", "Title", "UniqueName", "Type", "Description", "Critics" }, analyzer);
                        var query   = parseQuery(searchQuery, parser);
                        var hits    = searcher.Search(query, null, hits_limit, Sort.RELEVANCE).ScoreDocs;
                        var results = _mapLuceneToDataList(hits, searcher);
                        return(results);
                    }
                }
            }
        }
        public static string GetKeyWordSplid(string keywords)
        {
            StringBuilder sb = new StringBuilder();
            //Analyzer analyzer = new PanGuAnalyzer();
            Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);


            TokenStream    stream  = analyzer.TokenStream(keywords, new StringReader(keywords));
            ITermAttribute ita     = null;
            bool           hasNext = stream.IncrementToken();

            while (hasNext)
            {
                ita = stream.GetAttribute <ITermAttribute>();
                sb.Append(ita.Term + " ");
                hasNext = stream.IncrementToken();
            }
            return(sb.ToString());
        }
Beispiel #10
0
        public static string GetTag(string text)
        {
            text = text.Replace("\n", string.Empty).Replace("\r", string.Empty).Replace(",", string.Empty).Replace("    ", string.Empty);
            StandardAnalyzer analyzer = new StandardAnalyzer();

            int termCounter = 0;

            StringBuilder sb = new StringBuilder();

            AnalyzerView view = new TermAnalyzerView();

            StringReader stringReader = new StringReader(text);

            TokenStream tokenStream = analyzer.TokenStream("defaultFieldName", stringReader);

            var Text = view.GetView(tokenStream, out termCounter).Trim();

            return(Text);
        }
Beispiel #11
0
        public RAMDirectory InitIndex(DataTable dt)
        {
            var directory = new RAMDirectory();

            using (Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30))
                using (var writer = new IndexWriter(directory, analyzer, new IndexWriter.MaxFieldLength(10000)))
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        var document = new Document();
                        document.Add(new Field("Title", (string)row[$"Title"], Field.Store.YES, index: Field.Index.ANALYZED));
                        document.Add(new Field("Content", (string)row["Content"], Field.Store.YES, index: Field.Index.ANALYZED));
                        writer.AddDocument(document);
                    }
                    writer.Optimize();
                    writer.Flush(true, true, true);
                }
            return(directory);
        }
Beispiel #12
0
        // add list site object
        public static void AddUpdateLuceneIndex(List <SiteObject> SiteList)
        {
            // init lucene
            var analyzer = new StandardAnalyzer(Version.LUCENE_30);

            using (var writer = new IndexWriter(_directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                // add data to lucene search index (replaces older entries if any)
                foreach (var SiteObject in SiteList)
                {
                    _addToLuceneIndex(SiteObject, writer);
                }

                // close handles
                analyzer.Close();
                writer.Optimize();
                writer.Dispose();
            }
        }
Beispiel #13
0
        /// <summary>
        /// Method that will use _addToLuceneIndex() in order to add a list of records to search index
        /// </summary>
        /// <param name="sampleDatas"></param>
        public void AddUpdateLuceneIndex(IEnumerable <LearningCourseDTO> sampleDatas)
        {
            // init lucene
            var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

            using (var writer = new IndexWriter(_directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                // add data to lucene search index (replaces older entry if any)
                foreach (var sampleData in sampleDatas)
                {
                    _addToLuceneIndex(sampleData, writer);
                }
                ;

                // close handles
                analyzer.Close();
                writer.Dispose();
            }
        }
Beispiel #14
0
        private static IndexWriter GetIndexWriter(string indexPath, bool isCreate = false)
        {
            var dir      = FSDirectory.Open(indexPath);
            var analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);

            var config = new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer)
            {
                OpenMode = isCreate
                    ? OpenMode.CREATE
                    : OpenMode.CREATE_OR_APPEND,
                // Optional: for better indexing performance, if you
                // are indexing many documents, increase the RAM
                // buffer.
                //
                // RAMBufferSizeMB = 256.0
            };

            return(new IndexWriter(dir, config));
        }
        public int Count(List <SearchCondition> conditions)
        {
            if (conditions == null || conditions.Count == 0)
            {
                throw new ArgumentNullException("searchTerms");
            }

            var analyzer  = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
            var directory = FSDirectory.Open(new DirectoryInfo(_luceneDir));

            if (!IndexReader.IndexExists(directory))
            {
                return(0);
            }

            var mainQuery = new BooleanQuery();

            foreach (var pair in conditions)
            {
                string searchQuery = pair.Keyword;
                if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", "")))
                {
                    searchQuery = searchQuery.Replace("*", "").Replace("?", "");
                }

                for (int i = 0; i < pair.SearchField.Length; i++)
                {
                    var query = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, pair.SearchField[i], analyzer).Parse(searchQuery);
                    mainQuery.Add(query, BooleanClause.Occur.MUST);
                }
            }
            var searcher = new IndexSearcher(directory, true);

            try
            {
                return(searcher.Search(mainQuery, 1).TotalHits);
            }
            finally
            {
                searcher.Close();
                analyzer.Close();
            }
        }
 private List <string> Search(IndexSearcher searcher, string expr)
 {
     using (var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
     {
         var queryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Description", analyzer);
         var collector   = TopScoreDocCollector.Create(1000, true);
         var query       = queryParser.Parse(expr);
         searcher.Search(query, collector);
         var result  = new List <string>();
         var matches = collector.TopDocs().ScoreDocs;
         foreach (var item in matches)
         {
             var id  = item.Doc;
             var doc = searcher.Doc(id);
             result.Add(doc.GetField("Gtin").StringValue);
         }
         return(result);
     }
 }
Beispiel #17
0
        protected void btnGetSegmentation_Click(object sender, EventArgs e)
        {
            string words = txtWords.Text;

            if (string.IsNullOrEmpty(words))
            {
                return;
            }

            Analyzer    analyzer    = new StandardAnalyzer(); // 标准分词 → 一元分词
            TokenStream tokenStream = analyzer.TokenStream("", new StringReader(words));
            Token       token       = null;

            while ((token = tokenStream.Next()) != null) // 只要还有词,就不返回null
            {
                string word = token.TermText();          // token.TermText() 取得当前分词
                Response.Write(word + "   |  ");
            }
        }
 public bool ClearLuceneIndex()
 {
     try
     {
         var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
         using (var writer = new IndexWriter(_directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED))
         {
             writer.DeleteAll();
             analyzer.Close();
             writer.Close();
             writer.Dispose();
         }
     }
     catch (Exception)
     {
         return(false);
     }
     return(true);
 }
Beispiel #19
0
        private PerFieldAnalyzerWrapper CreateAnalyzer(ICollection <Action> toDispose)
        {
            var standardAnalyzer = new StandardAnalyzer(Version.LUCENE_29);

            toDispose.Add(standardAnalyzer.Close);
            var perFieldAnalyzerWrapper = new PerFieldAnalyzerWrapper(standardAnalyzer);

            foreach (var analyzer in indexDefinition.Analyzers)
            {
                var analyzerInstance = indexDefinition.CreateAnalyzerInstance(analyzer.Key, analyzer.Value);
                if (analyzerInstance == null)
                {
                    continue;
                }
                toDispose.Add(analyzerInstance.Close);
                perFieldAnalyzerWrapper.AddAnalyzer(analyzer.Key, analyzerInstance);
            }
            return(perFieldAnalyzerWrapper);
        }
Beispiel #20
0
        public static bool IsValidLucene(string query)
        {
            try
            {
                using (Analyzer analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48))
                {
                    new QueryParser(LuceneVersion.LUCENE_48, string.Empty, analyzer).Parse(query);
                }
            }
            catch (ArgumentNullException)
            {
            }
            catch (ParseException)
            {
                return(false);
            }

            return(true);
        }
Beispiel #21
0
        /// <summary>
        /// The main lucene search method.
        /// </summary>
        /// <param name="searchQuery"></param>
        /// <param name="searchField"></param>
        /// <returns></returns>
        private IList <T> _search(string searchQuery, string searchField = "", int hitlimit = 30, int page = 1)
        {
            // validation
            if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", "")))
            {
                return(new List <T>());
            }

            // set up lucene searcher
            using (IndexReader reader = DirectoryReader.Open(_fluentIndex.Directory))
            {
                var searcher = new IndexSearcher(reader);
                var analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);

                // search by single field
                if (!string.IsNullOrEmpty(searchField))
                {
                    var parser  = new QueryParser(LuceneVersion.LUCENE_48, searchField, analyzer);
                    var query   = _parseQuery(searchQuery, parser);
                    var hits    = searcher.Search(query, hitlimit).ScoreDocs;
                    var results = _mapLuceneToDataList(hits, searcher);
                    analyzer.Dispose();
                    return(results);
                }
                // search by multiple fields (ordered by RELEVANCE)
                else
                {
                    var parser = new MultiFieldQueryParser(
                        LuceneVersion.LUCENE_48,
                        _searchConfig.AnalyzedFields.Concat(_searchConfig.NonAnalyzedFields).ToArray(),
                        analyzer
                        );

                    var query     = _parseQuery(searchQuery, parser);
                    var skip      = hitlimit * page;
                    var hits      = searcher.Search(query, null, hitlimit + skip, Sort.RELEVANCE).ScoreDocs;
                    var pagedHits = hits.Skip(skip);
                    var results   = _mapLuceneToDataList(pagedHits, searcher);
                    analyzer.Dispose();
                    return(results);
                }
            }
        }
Beispiel #22
0
        private IndexWriter GetIndexWriter(CachedDirectory cachedDirectory, StandardAnalyzer analyzer)
        {
            IndexWriter indexWriter = null;

            while (indexWriter == null)
            {
                try {
                    indexWriter = new IndexWriter(cachedDirectory, analyzer, !IndexReader.IndexExists(cachedDirectory), new IndexWriter.MaxFieldLength(IndexWriter.DEFAULT_MAX_FIELD_LENGTH));
                } catch (LockObtainFailedException) {
                    Console.WriteLine("Lock is taken, Hit 'Y' to clear the lock, or anything else to try again");
                    if ((Console.ReadLine() ?? "").ToLower().Trim() == "y")
                    {
                        cachedDirectory.ClearLock("write.lock");
                    }
                }
            }
            Console.WriteLine("IndexWriter lock obtained, this process has exclusive write access to index");
            return(indexWriter);
        }
Beispiel #23
0
        public static void AddListPostsToLuceneIndex(IEnumerable <PostModel> listPosts)
        {
            // init lucene
            var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

            using (var writer = new IndexWriter(directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                // add data to lucene search index (replaces older entry if any)

                foreach (var sampleData in listPosts)
                {
                    AddPostToLuceneIndex(sampleData, writer);
                }

                // close handles
                analyzer.Close();
                writer.Dispose();
            }
        }
        public static bool ClearLuceneIndex()
        {
            try {
                var analyzer = new StandardAnalyzer(Version.LUCENE_29);
                using (var writer = new IndexWriter(_directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED)) {
                    // remove older index entries
                    writer.DeleteAll();

                    // close handles
                    analyzer.Close();
                    writer.Close();
                    writer.Dispose();
                }
            }
            catch (Exception) {
                return(false);
            }
            return(true);
        }
Beispiel #25
0
        public void AnItemCanBeUpdatedInTheIndex()
        {
            TestDataGenerator tdg       = new TestDataGenerator();
            Directory         directory = new RAMDirectory();
            Analyzer          analyzer  = new StandardAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);

            _indexer = new LuceneIndexer(directory, analyzer);
            _indexer.CreateIndex(tdg.AllData);
            LuceneIndexSearcher searcher = new LuceneIndexSearcher(directory, analyzer, new MemoryCache(new MemoryCacheOptions()));

            SearchOptions options        = new SearchOptions("*****@*****.**", "Email");
            var           initialResults = searcher.ScoredSearch(options);

            foreach (var item in initialResults.Results)
            {
                _output.WriteLine($"{item.Score}\t{item.Document.Get("Id")}\t{item.Document.Get("FirstName")}\t{item.Document.Get("Email")}");
            }

            Document rambler = initialResults.Results.First().Document;
            User     user    = new User()
            {
                Id        = int.Parse(rambler.Get("Id")),
                FirstName = rambler.Get("FirstName"),
                Surname   = rambler.Get("Surname"),
                Email     = rambler.Get("Email"),
                JobTitle  = rambler.Get("JobTitle")
            };

            user.FirstName = "Duke";
            user.Surname   = "Nukem";
            _indexer.Update(user);
            var endResults = searcher.ScoredSearch(options);

            foreach (var item in endResults.Results)
            {
                _output.WriteLine($"{item.Score}\t{item.Document.Get("Id")}\t{item.Document.Get("FirstName")}\t{item.Document.Get("Email")}");
            }

            Assert.Equal(user.Id.ToString(), endResults.Results.First().Document.Get("Id"));
            Assert.Equal(user.FirstName, endResults.Results.First().Document.Get("FirstName"));
            Assert.Equal(user.Surname, endResults.Results.First().Document.Get("Surname"));
            directory.ClearLock("write.lock");
        }
        public void Build()
        {
            var standardAnalyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);
            var pipeAnalyzer     = new PipeAnalyzer();
            var ngramAnalyzer    = new EdgeNGramAnalyzer();
            var fieldAnalyzers   = new Dictionary <string, Analyzer>
            {
                //phrase
                { SearchableStandard.TitlePhrase, pipeAnalyzer },
                { SearchableStandard.TypicalJobTitlesPhrase, pipeAnalyzer },
                { SearchableStandard.KeywordsPhrase, pipeAnalyzer },
                //term
                { SearchableStandard.TitleTerm, standardAnalyzer },
                { SearchableStandard.TypicalJobTitlesTerm, standardAnalyzer },
                { SearchableStandard.KeywordsTerm, standardAnalyzer },
                //ngram
                { SearchableStandard.TitleNGram, ngramAnalyzer }
            };
            var perFieldAnalyzerWrapper = new PerFieldAnalyzerWrapper(standardAnalyzer, fieldAnalyzers);

            var config    = new IndexWriterConfig(LuceneVersion.LUCENE_48, perFieldAnalyzerWrapper);
            var directory = _directoryFactory.GetDirectory();

            using (var writer = new IndexWriter(directory, config))
            {
                writer.DeleteAll();
                writer.Commit();

                foreach (var standard in _coursesDataContext.Standards)
                {
                    var doc        = new Document();
                    var searchable = new SearchableStandard(standard);

                    foreach (var indexableField in searchable.GetFields())
                    {
                        doc.Add(indexableField);
                    }

                    writer.AddDocument(doc);
                    writer.Commit();
                }
            }
        }
        public List <ResourceNode> GetDetails([FromBody] SearchRequest searchRequest)
        {
            if (String.IsNullOrWhiteSpace(searchRequest.term))
            {
                return(new List <ResourceNode>());
            }

            Lucene.Net.Store.Directory fsDir = FSDirectory.Open(new DirectoryInfo(Path.Combine(CSETGlobalProperties.Static_Application_Path, "LuceneIndex")));

            IndexReader          reader   = IndexReader.Open(fsDir, true);
            Searcher             searcher = new IndexSearcher(reader);
            Analyzer             analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
            CSETGlobalProperties props    = new CSETGlobalProperties();

            using (CSET_Context context = new CSET_Context()) {
                SearchDocs search = new SearchDocs(props, new ResourceLibraryRepository(context, props));
                return(search.Search(searchRequest));
            }
        }
Beispiel #28
0
        public static List <User> GetByIndexRecords(string searchQuery)
        {
            string searchField = "Id";

            // set up lucene searcher
            using (var searcher = new IndexSearcher(_directory, false)) {
                var hits_limit = 1000;
                var analyzer   = new StandardAnalyzer(Version.LUCENE_30);

                // search by single field
                var parser  = new QueryParser(Version.LUCENE_30, searchField, analyzer);
                var query   = ParseQuery(searchQuery, parser);
                var hits    = searcher.Search(query, hits_limit).ScoreDocs;
                var results = _mapLuceneToDataList(hits, searcher);
                analyzer.Close();
                searcher.Dispose();
                return(results);
            }
        }
        public void BuildRamIndex(IEnumerable <SampleDataFileRow> dataToIndex)
        {
            var analyzer = new StandardAnalyzer(Version.LUCENE_30, ListStopWords);

            using (var writer = new IndexWriter(_RAMdirectory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED))
            {
                foreach (var sampleDataFileRow in dataToIndex)
                {
                    Document doc = new Document();
                    doc.Add(new Field("LineNumber", sampleDataFileRow.LineNumber.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO));
                    doc.Add(new Field("LineText", sampleDataFileRow.LineText, Field.Store.YES, Field.Index.ANALYZED));
                    writer.AddDocument(doc);
                }
                analyzer.Close();
                writer.Optimize();
                //writer.Flush(true, false, true);
                writer.Dispose();
            }
        }
Beispiel #30
0
        static Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); // Word APplication

        /*
         * Khởi tạo các thành phần chính cho Bộ đánh chỉ mục:
         * 1.. Bộ phân tích
         * 2.. Thư mục chứa Index
         * 3.. Bộ ghi chỉ mục
         * Thực hiện thu thập dữ liệu: Quét toàn bộ ổ đĩa trên máy tính (exclude: Ổ CD/DVD, External Drives,...)
         */
        public static bool Initiate()
        {
            // Xử lý stopword, indexing.
            using (var analyzer = new StandardAnalyzer(Version.LUCENE_29, new FileInfo(@"..\..\resources\stopwords\stopwords.txt")))
            {
                // TODO: User có thể chọn nơi lưu trữ Index (Default: Ổ C)
                using (var indexDir = FSDirectory.Open(indexDirIndex.FullName))
                {
                    using (var indexWriter = new IndexWriter(indexDir, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
                    {
                        // TODO: Scan các thư mục được chọn để Index
                        List <Location> locations = DbAccess.GetLocations();
                        ScanLocationsForIndex(locations, analyzer, indexDir, indexWriter);
                    }
                }
            }

            return(true); // Condidion Multithread stop.
        }
        /// <summary>
        ///     Builds the query.
        /// </summary>
        /// <param name="criteria">The criteria.</param>
        /// <returns></returns>
        public override object BuildQuery(ISearchCriteria criteria)
        {

            var builder = base.BuildQuery(criteria) as QueryBuilder;
            var query = builder.Query as BooleanQuery;
            var analyzer = new StandardAnalyzer(u.Version.LUCENE_30);

            if (criteria is CatalogItemSearchCriteria)
            {
                var c = criteria as CatalogItemSearchCriteria;
                var datesFilterStart = new TermRangeQuery(
                    "startdate", c.StartDateFrom.HasValue ? DateTools.DateToString(c.StartDateFrom.Value, DateTools.Resolution.SECOND) : null, DateTools.DateToString(c.StartDate, DateTools.Resolution.SECOND), false, true);
                query.Add(datesFilterStart, Occur.MUST);

                if (c.EndDate.HasValue)
                {
                    var datesFilterEnd = new TermRangeQuery(
                        "enddate",
                        DateTools.DateToString(c.EndDate.Value, DateTools.Resolution.SECOND),
                        null,
                        true,
                        false);

                    query.Add(datesFilterEnd, Occur.MUST);
                }

                if (c.Outlines != null && c.Outlines.Count > 0)
                {
                    AddQuery("__outline", query, c.Outlines);
                }

                query.Add(new TermQuery(new Term("__hidden", "false")), Occur.MUST);

                if (!String.IsNullOrEmpty(c.Catalog))
                {
                    AddQuery("catalog", query, c.Catalog);
                }

                // Add search
                if (!String.IsNullOrEmpty(c.SearchPhrase))
                {
                    if (c.IsFuzzySearch)
                    {

                        var keywords = c.SearchPhrase.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                        //var keywords = Regex.Split(c.SearchPhrase, @"\s+");
                        var searchPhrase = string.Empty;
                        searchPhrase = keywords.Aggregate(
                            searchPhrase,
                            (current, keyword) => current + String.Format("{0}~{1}", keyword.Replace("~", ""), c.FuzzyMinSimilarity));

                        var parser = new QueryParser(u.Version.LUCENE_30, "__content", analyzer)
                                         {
                                             DefaultOperator =
                                                 QueryParser
                                                 .Operator.AND
                                         };

                        var searchQuery = parser.Parse(searchPhrase);
                        query.Add(searchQuery, Occur.MUST);
                    }
                    else
                    {
                        var parser = new QueryParser(u.Version.LUCENE_30, "__content", analyzer)
                                         {
                                             DefaultOperator =
                                                 QueryParser
                                                 .Operator.AND
                                         };
                        var searchQuery = parser.Parse(c.SearchPhrase);
                        query.Add(searchQuery, Occur.MUST);
                    }
                }
            }
            else if (criteria is OrderSearchCriteria)
            {
                var c = criteria as OrderSearchCriteria;

                if (!String.IsNullOrEmpty(c.CustomerId))
                {
                    AddQuery("customerid", query, c.CustomerId);
                }
            }

            return builder;
        }
	  public virtual void testCombiningMarksBackwards()
	  {
		Analyzer a = new StandardAnalyzer(Version.LUCENE_33);
		checkOneTerm(a, "ざ", "さ"); // hiragana Bug
		checkOneTerm(a, "ザ", "ザ"); // katakana Works
		checkOneTerm(a, "壹゙", "壹"); // ideographic Bug
		checkOneTerm(a, "아゙", "아゙"); // hangul Works
	  }
Beispiel #33
0
 internal static IndexWriter CreateLuceneWriter(StandardAnalyzer standardAnalyzer, Directory directory)
 {
     return new IndexWriter(directory,
                            standardAnalyzer,
                            false,
                            IndexWriter.MaxFieldLength.UNLIMITED);
 }