我试图找出如何为多次使用相同单词的说明添加更多权重,以便首先在c#中显示lucene.net
。
例:
先决条件:
假设我有一个像这样的项目列表:
情景:
我搜索exchange
。
列表将按此顺序返回:
所以我试图让#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;
}
答案 0 :(得分:2)
免责声明:我只能谈论Lucene(而不是Lucene.NET),但我相信它们是使用相同的原则构建的。
文献#1&首先出现的#2是因为场重(#1的1/2,#2的1/2)高于#3的2/11(假设你没有使用停用词)。这里的要点是前两个文件中的“交换”术语比第三个文件中的“交换”术语更加重要。这是默认similarity algorithm的工作原理。在实践中,这是一个位更多复杂,正如您可以在给定链接中观察到的那样。
所以你要求的是另一种相似度算法。有一个类似的讨论here我认为MySim
试图达到你想要的东西。只是不要忘记将这个相似性实例设置为索引编写者和搜索者。