利用Boost影响Lucene查询结果的排序


以下代码在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();
        }
以下是运行结果
posted @ 2008-01-03 21:18  菩提树下的杨过  阅读(2204)  评论(1编辑  收藏  举报