<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    當幸福來敲門

    我就會牢牢抓住!
    隨筆 - 50, 文章 - 3, 評論 - 8, 引用 - 0
    數據加載中……

    分享示例Lucene.NET 2.9版本基本用法

    5. 排序

    通過 SortField 的構造參數,我們可以設置排序字段,排序條件,以及倒排。
    Sort sort = new Sort(new SortField(FieldName, SortField.DOC, false)); IndexSearcher searcher = new IndexSearcher(reader); Hits hits = searcher.Search(query, sort);
    排序對搜索速度影響還是很大的,盡可能不要使用多個排序條件。

    6. 過濾

    使用 Filter 對搜索結果進行過濾,可以獲得更小范圍內更精確的結果。

    舉個例子,我們搜索上架時間在 2005-10-1 到 2005-10-30 之間的商品。
    對于日期時間,我們需要轉換一下才能添加到索引庫,同時還必須是索引字段。
    // index document.Add(FieldDate, DateField.DateToString(date), Field.Store.YES, Field.Index.UN_TOKENIZED); //... // search Filter filter = new DateFilter(FieldDate, DateTime.Parse("2005-10-1"), DateTime.Parse("2005-10-30")); Hits hits = searcher.Search(query, filter);
    除了日期時間,還可以使用整數。比如搜索價格在 100 ~ 200 之間的商品。
    Lucene.Net NumberTools 對于數字進行了補位處理,如果需要使用浮點數可以自己參考源碼進行。
    // index document.Add(new Field(FieldNumber, NumberTools.LongToString((long)price), Field.Store.YES, Field.Index.UN_TOKENIZED)); //... // search Filter filter = new RangeFilter(FieldNumber, NumberTools.LongToString(100L), NumberTools.LongToString(200L), true, true); Hits hits = searcher.Search(query, filter);
    使用 Query 作為過濾條件。
    QueryFilter filter = new QueryFilter(QueryParser.Parse("name2", FieldValue, analyzer));
    我們還可以使用 FilteredQuery 進行多條件過濾。
    Filter filter = new DateFilter(FieldDate, DateTime.Parse("2005-10-10"), DateTime.Parse("2005-10-15")); Filter filter2 = new RangeFilter(FieldNumber, NumberTools.LongToString(11L), NumberTools.LongToString(13L), true, true); Query query = QueryParser.Parse("name*", FieldName, analyzer); query = new FilteredQuery(query, filter); query = new FilteredQuery(query, filter2); IndexSearcher searcher = new IndexSearcher(reader); Hits hits = searcher.Search(query);
    7. 分布搜索

    我們可以使用 MultiReader 或 MultiSearcher 搜索多個索引庫。
    MultiReader reader = new MultiReader(new IndexReader[] { IndexReader.Open(@"c:\index"), IndexReader.Open(@"\\server\index") }); IndexSearcher searcher = new IndexSearcher(reader); Hits hits = searcher.Search(query);

    IndexSearcher searcher1 = new IndexSearcher(reader1); IndexSearcher searcher2 = new IndexSearcher(reader2); MultiSearcher searcher = new MultiSearcher(new Searchable[] { searcher1, searcher2 }); Hits hits = searcher.Search(query);
    還可以使用 ParallelMultiSearcher 進行多線程并行搜索。

    8. 合并索引庫

    將 directory1 合并到 directory2 中。
    Directory directory1 = FSDirectory.GetDirectory("index1", false); Directory directory2 = FSDirectory.GetDirectory("index2", false); IndexWriter writer = new IndexWriter(directory2, analyzer, false); writer.AddIndexes(new Directory[] { directory }); Console.WriteLine(writer.DocCount()); writer.Close();
    9. 顯示搜索語法字符串

    我們組合了很多種搜索條件,或許想看看與其對等的搜索語法串是什么樣的。
    BooleanQuery query = new BooleanQuery(); query.Add(query1, true, false); query.Add(query2, true, false); //... Console.WriteLine("Syntax: {0}", query.ToString());
    輸出:
    Syntax: +(name:name* value:name*) +number:[0000000000000000b TO 0000000000000000d]

    呵呵,就這么簡單。

    10. 操作索引庫

    刪除 (軟刪除,僅添加了刪除標記。調用 IndexWriter.Optimize() 后真正刪除。)
    IndexReader reader = IndexReader.Open(directory); // 刪除指定序號(DocId)的 Document。 reader.Delete(123); // 刪除包含指定 Term 的 Document。 reader.Delete(new Term(FieldValue, "Hello")); // 恢復軟刪除。 reader.UndeleteAll(); reader.Close();
    增量更新 (只需將 create 參數設為 false,即可往現有索引庫添加新數據。)
    Directory directory = FSDirectory.GetDirectory("index", false); IndexWriter writer = new IndexWriter(directory, analyzer, false); writer.AddDocument(doc1); writer.AddDocument(doc2); writer.Optimize(); writer.Close();
    11. 優化

    批量向 FSDirectory 增加索引時,增大合并因子(mergeFactor )和最小文檔合并數(minMergeDocs)有助于提高性能,減少索引時間。
    IndexWriter writer = new IndexWriter(directory, analyzer, true);  writer.maxFieldLength = 1000; // 字段最大長度 writer.mergeFactor = 1000; writer.minMergeDocs = 1000;  for (int i = 0; i < 10000; i++) { // Add Documentes... }  writer.Optimize(); writer.Close();
    文章來自學IT網:http://www.xueit.com/LuceneNet/show-10315-2.aspx


    轉自《深入 Lucene 索引機制》

    利用 Lucene,在創建索引的工程中你可以充分利用機器的硬件資源來提高索引的效率。當你需要索引大量的文件時,你會注意到索引過程的瓶頸是在往磁盤上寫索引文件的過程中。為了解決這個問題, Lucene 在內存中持有一塊緩沖區。但我們如何控制 Lucene 的緩沖區呢?幸運的是,Lucene 的類 IndexWriter 提供了三個參數用來調整緩沖區的大小以及往磁盤上寫索引文件的頻率。

    1.合并因子 (mergeFactor)

    這個參數決定了在 Lucene 的一個索引塊中可以存放多少文檔以及把磁盤上的索引塊合并成一個大的索引塊的頻率。比如,如果合并因子的值是 10,那么當內存中的文檔數達到 10 的時候所有的文檔都必須寫到磁盤上的一個新的索引塊中。并且,如果磁盤上的索引塊的隔數達到 10 的話,這 10 個索引塊會被合并成一個新的索引塊。這個參數的默認值是 10,如果需要索引的文檔數非常多的話這個值將是非常不合適的。對批處理的索引來講,為這個參數賦一個比較大的值會得到比較好的索引效果。

    2.最小合并文檔數 (minMergeDocs)

    這個參數也會影響索引的性能。它決定了內存中的文檔數至少達到多少才能將它們寫回磁盤。這個參數的默認值是10,如果你有足夠的內存,那么將這個值盡量設的比較大一些將會顯著的提高索引性能。

    3.最大合并文檔數 (maxMergeDocs)

    這個參數決定了一個索引塊中的最大的文檔數。它的默認值是 Integer.MAX_VALUE,將這個參數設置為比較大的值可以提高索引效率和檢索速度,由于該參數的默認值是整型的最大值,所以我們一般不需要改動這個參數。

     

    文章來自學IT網:http://www.xueit.com/LuceneNet/show-10315-2.aspx



    posted on 2011-12-14 14:05 wyx 閱讀(1925) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 成年女人免费v片| 亚洲av成本人无码网站| 暖暖免费日本在线中文| 亚洲妓女综合网99| yy6080亚洲一级理论| 日韩精品免费视频| 亚洲乱码av中文一区二区| 国产亚洲一区二区三区在线不卡| 污污网站18禁在线永久免费观看| 中文字幕亚洲综合小综合在线 | 最近更新免费中文字幕大全| 四虎永久成人免费影院域名| 大学生美女毛片免费视频| 国内免费高清在线观看| 亚洲成a人片在线观看中文app| 亚洲国产精品张柏芝在线观看| 亚洲精品国产日韩| 日本免费在线观看| 国产又大又黑又粗免费视频 | 成人免费av一区二区三区| 四虎影视免费在线| 亚洲av午夜国产精品无码中文字| 无码一区二区三区AV免费| 91大神在线免费观看| 久久永久免费人妻精品| 香蕉免费在线视频| 久久久久久久久久久免费精品| 日韩大片免费观看视频播放| 国产精品手机在线亚洲| 免费国产黄网站在线看| 污视频网站免费在线观看| 香港经典a毛片免费观看看| 亚洲av日韩专区在线观看| 欧美日韩亚洲精品| 国产精品亚洲AV三区| 亚洲avav天堂av在线网毛片| 黄色网址免费在线| a一级毛片免费高清在线| 99在线免费观看| 男的把j放进女人下面视频免费| 久久精品免费观看国产|