以下代码在Lucene2.1下通过,主要是通过设置Document的Boost来影响文档的权重,以达到控制查询结果顺序的目的(前提是不利用Sort排序的情况下):
private?void?btnSearch_Click(object?sender,?EventArgs?e)
????????{
????????????RAMDirectory?ramDir?=?new?RAMDirectory();
????????????IndexWriter?iw?=?new?IndexWriter(ramDir,new?StandardAnalyzer(),true);
????????????string[]?NameList?=?{?"you?are?my?friend",?"you?are?my?wife",?"I?love?you"?};
????????????string[]?FileList?=?{?"1",?"2",?"3"?};
????????????for?(int?i?=?0;?i?<?NameList.Length;?i++)
????????????{
????????????????Document?doc?=?new?Document();
????????????????doc.Add(new?Field("name",?NameList[i],?Field.Store.YES,?Field.Index.TOKENIZED));
????????????????doc.Add(new?Field("file",?FileList[i],?Field.Store.YES,?Field.Index.TOKENIZED));
????????????????if?(i?==?2)?{?doc.SetBoost(2.0f);?}//这里设置了第三个文档优先级最高,所以在搜索出来的结果中,该文档排在最前
????????????????iw.AddDocument(doc);
????????????}
????????????iw.Close();
????????????IndexSearcher?_searcher?=?new?IndexSearcher(ramDir);
????????????QueryParser?_parser?=?new?QueryParser("name",new?StandardAnalyzer());
????????????Query??_query?=?_parser.Parse("you");
????????????Hits?hitDoc?=?_searcher.Search(_query);
????????????lstResult.Items.Clear();//lstResult为一个ListBox
????????????for?(int?i?=?0;?i?<?hitDoc.Length();?i++)
????????????{
????????????????Document?doc?=?hitDoc.Doc(i);
????????????????lstResult.Items.Add(doc.Get("file")?+?"?"?+?doc.Get("name"));
????????????}????????????
????????????_searcher.Close();
????????}
以下是运行结果