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>()); }
/// <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); }
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(); } }
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(); } } }
/// <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); } }
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())); } } }
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()); }
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); }
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); }
// 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(); } }
/// <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(); } }
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); } }
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); }
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); }
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); }
/// <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); } } }
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); }
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); }
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)); } }
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(); } }
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 }
internal static IndexWriter CreateLuceneWriter(StandardAnalyzer standardAnalyzer, Directory directory) { return new IndexWriter(directory, standardAnalyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); }