Lucene.Net用多次相同的词来描述描述,得分更高

时间:2013-01-12 18:34:25

标签: c# lucene lucene.net

我试图找出如何为多次使用相同单词的说明添加更多权重,以便首先在c#中显示lucene.net

例:
先决条件:

假设我有一个像这样的项目列表:

  1. 还原Exchange
  2. 备份交换
  3. 交换是一个非常棒的工具,交换可以有很多邮箱
  4. 情景:

    我搜索exchange

    列表将按此顺序返回:

    1. (它具有与2相同的权重并且首先被添加到索引中)
    2. (它具有与1相同的权重并且它被添加到第二个索引中)
    3. (其中有交换参考,但其长度大于1和2)
    4. 所以我试图让#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;
                      }
      

1 个答案:

答案 0 :(得分:2)

免责声明:我只能谈论Lucene(而不是Lucene.NET),但我相信它们是使用相同的原则构建的。

文献#1&首先出现的#2是因为场重(#1的1/2,#2的1/2)高于#3的2/11(假设你没有使用停用词)。这里的要点是前两个文件中的“交换”术语比第三个文件中的“交换”术语更加重要。这是默认similarity algorithm的工作原理。在实践中,这是一个位更多复杂,正如您可以在给定链接中观察到的那样。

所以你要求的是另一种相似度算法。有一个类似的讨论here我认为MySim试图达到你想要的东西。只是不要忘记将这个相似性实例设置为索引编写者和搜索者。

相关问题