golang programming language study methods websocket

大地缸發表於2021-01-12

title: “Lucenenet入門介紹”
date: 2021-01-11T20:39:26+08:00
draft: true
tags: [‘lucenenet’]
author: “dadigang”
author_cn: “大地缸”

personal: “http://www.real007.cn"

關於作者

如果你還不知道lucenenet是什麼請移步官網簡介

github.com/apache/lucenenet

入門介紹

簡單來說是.net的全文搜尋引擎,首先網路上大部分關於lucene的介紹都是基於java的,本文介紹的是基於.net平臺的,可以說是java lucene的移植版本,最初lucenenet開發到3.0的時候進行不下去了,後來在2019-2020又突然釋出了4.8版本,可能真的是由於.net core開源

直接上程式碼吧

  • 開啟一個本地資料庫目錄

    var dir = FSDirectory.Open(ludir);
  • 初始化分詞器

    switch (this.analyzer)
                  {
                      case "standard":
                          analyzer=new StandardAnalyzer(LuceneVersion.LUCENE_48);
                          break;
                      case "whitespace":
                          analyzer=new WhitespaceAnalyzer(LuceneVersion.LUCENE_48);
                          break;
                      case "smartcn":
                          analyzer=new SmartChineseAnalyzer(LuceneVersion.LUCENE_48);
                          break;
                      default: 
                          throw new Exception();
                          break;
                  }
                   analyzer = new SmartChineseAnalyzer(LuceneVersion.LUCENE_48);
  • 準備寫入一些資料

    IndexWriterConfig iwc = new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer);
    Document doc = new Document();
              Field pathField = new StringField("id", ObjectId.GenerateNewId().ToString(), Field.Store.YES);
              doc.Add(pathField);
    
              Field contentField = new TextField("content", getContent(d), Field.Store.YES);
              doc.Add(contentField);
    
    
        Field binaryField = new Lucene.Net.Documents.StoredField("bin",new BytesRef(d.ToBson()));
        doc.Add(binaryField);


        writer.AddDocument(doc);

* 適時適當的寫入磁碟資料
```csharp

writer.Commit();
  • 查詢資料怎麼做
            IndexReader reader = DirectoryReader.Open(FSDirectory.Open(directoryInfo.FullName));
            IndexSearcher searcher = new IndexSearcher(reader);
            // :Post-Release-Update-Version.LUCENE_XY:
            Analyzer analyzer = new WhitespaceAnalyzer(LuceneVersion.LUCENE_48);


            // :Post-Release-Update-Version.LUCENE_XY:
            QueryParser parser = new QueryParser(LuceneVersion.LUCENE_48, search_record_name, analyzer);
                BooleanQuery mp = new BooleanQuery();
                var sp = line.Split(' ');
                foreach (var s in sp)
                {
                    if (s.Trim() == string.Empty) continue;
                    mp.Add(new TermQuery(new Term(search_record_name,s)),Occur.MUST);
                }
                var r=searcher.Search(mp, null, Convert.ToInt32(search_result_count));
  • 最後獲取搜尋結果資料
    var doc=reader.Document(h.Doc);
    var f = doc.GetBinaryValue("bin");
    var bdoc = BsonDocument.ReadFrom(f.Bytes);

所以親愛的小夥伴開始你的資料搜尋之旅吧

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章