我试图弄清楚如何为lucene.net
在 c# 中多次出现相同单词的描述添加更多权重。
示例:
前置条件:
假设我有一个这样的项目列表:
- 恢复交换
- 备份交换
- exchange是一个非常棒的工具,exchange可以有很多邮箱
设想:
我搜索exchange
.
该列表将按以下顺序返回:
- (它的权重与2相同,并首先添加到索引中)
- (它与1具有相同的权重,并且它被添加到第二个索引中)
- (里面有交换的参考,但长度大于1和2)
所以我试图#3
首先出现,因为它在描述中交换了不止一次。
这是一些显示我设置相似度的代码:
// set up lucene searcher
using (var searcher = new IndexSearcher(directory, false))
{
var hits_limit = 1000;
var analyzer = new StandardAnalyzer(Version.LUCENE_29);
searcher.Similarity = new test();
// search by single field
if (!string.IsNullOrEmpty(searchField))
{
var parser = new QueryParser(Version.LUCENE_29, searchField, analyzer);
var query = parseQuery(searchQuery, parser);
var hits = searcher.Search(query, hits_limit).ScoreDocs;
var results = mapLuceneToDataList(hits, searcher);
analyzer.Close();
searcher.Dispose();
return results;
}
// search by multiple fields (ordered by RELEVANCE)
else
{
var parser = new MultiFieldQueryParser
(Version.LUCENE_29, new[] { "Id", "Name", "Description" }, analyzer);
var query = parseQuery(searchQuery, parser);
var hits = searcher.Search
(query, null, hits_limit, Sort.RELEVANCE).ScoreDocs;
var results = mapLuceneToDataList(hits, searcher);
analyzer.Close();
searcher.Dispose();
return results;
}