国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【轉載】使用Lucene.NET實現數據檢索功能

2019-11-17 01:42:17
字體:
來源:轉載
供稿:網友

【轉載】使用Lucene.NET實現數據檢索功能

1、索引的管理

//指定索引庫文件存放文件位置FSDirectory directory = FSDirectory.Open(new DirectoryInfo(this.IndexDataDir), new NativeFSLockFactory());//判斷索引文件目錄是否存在bool isExist = IndexReader.IndexExists(directory);if (isExist){    if (IndexWriter.IsLocked(directory))    {        IndexWriter.Unlock(directory);    }}//盤古分詞器PanGuAnalyzer analyzer = new PanGuAnalyzer();//索引寫入類IndexWriter writer = new IndexWriter(directory, analyzer, !isExist, IndexWriter.MaxFieldLength.UNLIMITED);//循環隊列執行操作while (IndexDataQueue.Count > 0){    Document document = new Document();//這是我為索引數據自定義的模型類,主要內容是文件的路徑、名稱、內容和索引管理的操作類型(新增、更新、刪除)    BaseDataMode mode = IndexDataQueue.Dequeue();    switch (mode.Type)    {        case OperationType.Insert:            {                foreach (KeyValuePair<string, string> kv in mode.Content)                {                    //這里kv.Key是設置索引內字段的名稱,kv.Value是這個字段內存儲的內容。                    document.Add(new Field(kv.Key, kv.Value, Field.Store.YES, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));                }                writer.AddDocument(document);            }; break;        case OperationType.Update:        {            //設置刪除條件            MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, new string[] { "id" }, analyzer);            Query query = parser.Parse(mode.Content["id"]);            writer.DeleteDocuments(query);            foreach (KeyValuePair<string, string> kv in mode.Content)            {                document.Add(new Field(kv.Key, kv.Value, Field.Store.YES, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));            }            writer.AddDocument(document);        }; break;        case OperationType.Delete:        {            MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, new string[] { "id" }, analyzer);            Query query = parser.Parse(mode.Content["id"]);            writer.DeleteDocuments(query);        }; break;        default: { }; break;    }}//提交操作writer.Commit();//優化writer.Optimize();//關閉連接writer.Close();directory.Close();

2、檢索

//指定索引庫文件存放文件位置FSDirectory directory = FSDirectory.Open(new DirectoryInfo(this.IndexDir), new NativeFSLockFactory());IndexReader reader = IndexReader.Open(directory, true);IndexSearcher searcher = new IndexSearcher(reader);//設置關鍵詞在條件中為OR關系BooleanQuery queryOr = new BooleanQuery();foreach (string Word in SplitContent.SplitByPanGu(keyword)){    foreach (KeyValuePair<string, string> kv in Mode.Content)    {        TermQuery query = new TermQuery(new Term(kv.Key, word));        //這里設置條件為Or關系        queryOr.Add(query, BooleanClause.Occur.SHOULD);    }}//獲取搜索結果       //1000為搜索文件的下標限制,設置這個可以控制檢索的范圍,也可以用于分頁顯示TopDocs tds = searcher.Search(queryOr, null, 1000);ScoreDoc[] docs = tds.scoreDocs;for (int i = 0; i < docs.Length; i++){    int docId = docs[i].doc;    Document doc = searcher.Doc(docId);string content = doc.Get("索引內字段的名稱");}

轉自:http://www.survivalescaperooms.com/liusuqi/p/3671161.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商南县| 沛县| 德保县| 九江县| 北碚区| 徐汇区| 花莲市| 龙井市| 通辽市| 汉阴县| 温泉县| 望都县| 新乡县| 大余县| 英吉沙县| 阜新市| 沽源县| 普格县| 秭归县| 海宁市| 岱山县| 五指山市| 西林县| 重庆市| 大埔区| 盐源县| 视频| 绍兴市| 固镇县| 青冈县| 运城市| 北安市| 固始县| 体育| 沙雅县| 金堂县| 徐汇区| 邻水| 兰西县| 雅安市| 黄骅市|