Lucene.net多字段(Fields)、多索引目录(IndexSearcher)搜索
生活随笔
收集整理的這篇文章主要介紹了
Lucene.net多字段(Fields)、多索引目录(IndexSearcher)搜索
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Lucene.net是目前在.net環(huán)境中被普遍使用的全文索引的開源項目,這次在項目的開發(fā)中也使用它進行全文索引。
在開發(fā)過程中碰到一些小問題就是對多字段和多索引目錄進行搜索。
1、多字段搜索就是同時要一個以上的字段中的內(nèi)容進行比較搜索,類似概念在SQL中就是select * from Table where a like '%query%' or b like '%query%'。
Lucene.net中的單個字段查詢大家都比較熟悉,這里對字段content進行搜索
Query query = QueryParser.Parse(querystr,"content",new ChineseAnalyzer());
Hits hits = searcher.Search(query);
對多個字段查詢用到一個MultiFieldQueryParser對象,該對象繼承自Query,我們要對字段title,content進行搜索。
string[] fields = {"content","title"};
Query multiquery = MultiFieldQueryParser.Parse(querystr,fields,new ChineseAnalyzer());
Hits hits = searcher.Search(multiquery);
2、多索引目錄就是要在多個索引目錄的中進行比較搜索,類似概念在SQL中就是select * from TableA union select * from TableB。
IndexSearcher[] searchers = new IndexSearcher[2];
searchers[0] = new IndexSearcher(IndexPath0);
searchers[1] = new IndexSearcher(IndexPath1);
MultiSearcher multisearcher = new MultiSearcher(searchers);
TopDocs multitopdocs = multisearcher.Search(query, null, 1000);
這個搜索的結(jié)果可能有相同的信息,比如你有一條相同的信息在多個目錄中索引,搜索的結(jié)果就會出現(xiàn)多次相同的信息。
還有一種搜索方式是用到ParallelMultiSearcher這個對象,它是從MulitSearcher繼承而來。
ParallelMultiSearcher parallelmultisearcher = new ParallelMultiSearcher(searchers);
TopDocs paralleltopdocs = parallelmultisearcher.Search(query, null, 1000);
這個搜索是對搜索后的結(jié)果進行合并,剔除重復(fù)的信息。
在開發(fā)過程中碰到一些小問題就是對多字段和多索引目錄進行搜索。
1、多字段搜索就是同時要一個以上的字段中的內(nèi)容進行比較搜索,類似概念在SQL中就是select * from Table where a like '%query%' or b like '%query%'。
Lucene.net中的單個字段查詢大家都比較熟悉,這里對字段content進行搜索
Query query = QueryParser.Parse(querystr,"content",new ChineseAnalyzer());
Hits hits = searcher.Search(query);
對多個字段查詢用到一個MultiFieldQueryParser對象,該對象繼承自Query,我們要對字段title,content進行搜索。
string[] fields = {"content","title"};
Query multiquery = MultiFieldQueryParser.Parse(querystr,fields,new ChineseAnalyzer());
Hits hits = searcher.Search(multiquery);
2、多索引目錄就是要在多個索引目錄的中進行比較搜索,類似概念在SQL中就是select * from TableA union select * from TableB。
IndexSearcher[] searchers = new IndexSearcher[2];
searchers[0] = new IndexSearcher(IndexPath0);
searchers[1] = new IndexSearcher(IndexPath1);
MultiSearcher multisearcher = new MultiSearcher(searchers);
TopDocs multitopdocs = multisearcher.Search(query, null, 1000);
這個搜索的結(jié)果可能有相同的信息,比如你有一條相同的信息在多個目錄中索引,搜索的結(jié)果就會出現(xiàn)多次相同的信息。
還有一種搜索方式是用到ParallelMultiSearcher這個對象,它是從MulitSearcher繼承而來。
ParallelMultiSearcher parallelmultisearcher = new ParallelMultiSearcher(searchers);
TopDocs paralleltopdocs = parallelmultisearcher.Search(query, null, 1000);
這個搜索是對搜索后的結(jié)果進行合并,剔除重復(fù)的信息。
總結(jié)
以上是生活随笔為你收集整理的Lucene.net多字段(Fields)、多索引目录(IndexSearcher)搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows平台下vlc编译之一:编译
- 下一篇: Lotus Notes应用经验谈