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

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

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

    當(dāng)幸福來敲門

    我就會(huì)牢牢抓住!
    隨筆 - 50, 文章 - 3, 評(píng)論 - 8, 引用 - 0
    數(shù)據(jù)加載中……

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

    5. 排序

    通過 SortField 的構(gòu)造參數(shù),我們可以設(shè)置排序字段,排序條件,以及倒排。
    Sort sort = new Sort(new SortField(FieldName, SortField.DOC, false)); IndexSearcher searcher = new IndexSearcher(reader); Hits hits = searcher.Search(query, sort);
    排序?qū)λ阉魉俣扔绊戇€是很大的,盡可能不要使用多個(gè)排序條件。

    6. 過濾

    使用 Filter 對(duì)搜索結(jié)果進(jìn)行過濾,可以獲得更小范圍內(nèi)更精確的結(jié)果。

    舉個(gè)例子,我們搜索上架時(shí)間在 2005-10-1 到 2005-10-30 之間的商品。
    對(duì)于日期時(shí)間,我們需要轉(zhuǎn)換一下才能添加到索引庫(kù),同時(shí)還必須是索引字段。
    // 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);
    除了日期時(shí)間,還可以使用整數(shù)。比如搜索價(jià)格在 100 ~ 200 之間的商品。
    Lucene.Net NumberTools 對(duì)于數(shù)字進(jìn)行了補(bǔ)位處理,如果需要使用浮點(diǎn)數(shù)可以自己參考源碼進(jìn)行。
    // 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 進(jìn)行多條件過濾。
    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 搜索多個(gè)索引庫(kù)。
    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 進(jìn)行多線程并行搜索。

    8. 合并索引庫(kù)

    將 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. 顯示搜索語法字符串

    我們組合了很多種搜索條件,或許想看看與其對(duì)等的搜索語法串是什么樣的。
    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]

    呵呵,就這么簡(jiǎn)單。

    10. 操作索引庫(kù)

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

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


    轉(zhuǎn)自《深入 Lucene 索引機(jī)制》

    利用 Lucene,在創(chuàng)建索引的工程中你可以充分利用機(jī)器的硬件資源來提高索引的效率。當(dāng)你需要索引大量的文件時(shí),你會(huì)注意到索引過程的瓶頸是在往磁盤上寫索引文件的過程中。為了解決這個(gè)問題, Lucene 在內(nèi)存中持有一塊緩沖區(qū)。但我們?nèi)绾慰刂?Lucene 的緩沖區(qū)呢?幸運(yùn)的是,Lucene 的類 IndexWriter 提供了三個(gè)參數(shù)用來調(diào)整緩沖區(qū)的大小以及往磁盤上寫索引文件的頻率。

    1.合并因子 (mergeFactor)

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

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

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

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

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

     

    文章來自學(xué)IT網(wǎng):http://www.xueit.com/LuceneNet/show-10315-2.aspx



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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 自拍偷自拍亚洲精品偷一| 666精品国产精品亚洲| 国产亚洲蜜芽精品久久| 一个人免费观看视频www| 亚洲国产精品久久人人爱| 4虎1515hh永久免费| 亚洲国产模特在线播放| 国产一卡二卡3卡四卡免费| 59pao成国产成视频永久免费| 午夜亚洲AV日韩AV无码大全| 日韩人妻无码精品久久免费一 | 区久久AAA片69亚洲| 一级成人a免费视频| 亚洲精品无码久久一线| 黄色网址在线免费| 国产精品四虎在线观看免费| 真正全免费视频a毛片| 亚洲性日韩精品一区二区三区| 中文字幕高清免费不卡视频| 亚洲精品无码不卡在线播放HE| 国产va在线观看免费| 亚洲国产成人久久精品app| 毛片免费全部免费观看| 日韩色日韩视频亚洲网站| 伊人久久精品亚洲午夜| 免费毛片a线观看| 亚洲成年网站在线观看| 免费一级特黄特色大片在线| 西西人体免费视频| 亚洲成A∨人片在线观看无码| 永久黄网站色视频免费观看| 亚洲欧洲国产成人精品| 免费看美女让人桶尿口| jizz中国免费| 亚洲最大免费视频网| 四虎免费久久影院| 久久久免费精品re6| 亚洲爆乳精品无码一区二区| 国产亚洲人成无码网在线观看| 在线观看免费人成视频色9| 一级毛片免费在线观看网站|