2016-11-23 22 views
1

我想获得另一个类似的文档。我使用Lucene.Net MoreLikeThis-Class来实现这一点。为此,我在多个字段 - 标题和内容中分离了我的文档。现在在没有有趣的条款的空查询中创建实际的查询结果。创建一个更像这个查询产生空的查询和条款

我可能看起来是这样的:

var queries = new List<Query>(); 
foreach(var docField in docFields) 
    var similarSearch = new MoreLikeThis(indexReader); 
    similarSearch.SetFieldNames(docField.fieldName); 
    similarSearch.Analyzer = new GermanAnalyzer(Version.LUCENE_30, new HashSet<string>(StopWords)); 
    similarSearch.MinDocFreq = 1; 
    similarSearch.MinTermFreq = 1; 
    similarSearch.MinWordLen = 1; 
    similarSearch.Boost = true; 
    similarSearch.BoostFactor = boostFactor; 
    using(var reader = new StringReader(docField.Content)){ 
     var searchQuery = similarSearch.Like(reader); 
     // debugging purpose 
     var queryString = searchQuery.ToString(); // empty 
     var terms = similarSearch.RetrieveInterestingTerms(reader); // also empty 
     queries.Add(searchQuery); 
    } 
var booleanQuery = new BooleanQuery(); 
foreach(var moreLikeThisQuery in queries) 
{ 
    booleanQuery.Add(moreLikeThisQuery, Occur.SHOULD); 
} 
var topDocs = indexSearcher.Search(booleanQuery, maxNumberOfResults); // and of course no results obtained 

所以,问题是: 为什么没有条款/为什么不生成查询?

我希望的被看作重要的事情,如果不是请帮助我,使我的第一个问题好:)

回答

1

我得到它的工作。

问题是,我工作在虚假的目录。 我有不同的解决方案,用于创建索引和创建查询,并与索引位置不匹配。

所以一般的解决方案将是: 您的Querygenerating-Class是否完全初始化? (MinDocFreq,MinTermFreq,MinWordLen,有一个分析器,设置字段名称)

您正在使用的IndexReader是否已正确初始化?