Lucene.Net - 不同服务器中的奇怪行为

时间:2011-12-12 15:53:01

标签: lucene.net

我正在搜索我们的某个网站:(网站A)

    BooleanQuery booleanQuery = new BooleanQuery();

    foreach (var field in fields)
    {
        QueryParser qp = new QueryParser(field, new StandardAnalyzer());
        Query query = qp.Parse(search.ToLower() + "*");
        if (field.Contains("Title")) { query.SetBoost((float)1.8); }
        booleanQuery.Add(query, BooleanClause.Occur.SHOULD);  
    }

    // CODE DIFFERENCE IS HERE
    Query query2 = new TermQuery(new Term("StateProperties.IsActive", "True"));
    booleanQuery.Add(query2, BooleanClause.Occur.MUST);
    // END CODE DIFFERENCE

    Lucene.Net.Search.TopScoreDocCollector collector = Lucene.Net.Search.TopScoreDocCollector.create(21, true);

    searcher.Search(booleanQuery, collector);
    hits = collector.TopDocs().scoreDocs;

这是按预期工作的。 因为我们拥有一些网站,他们使用相同的骨架, 我将搜索上传到另一个站点(站点B) 但搜索停止返回结果。 在使用代码玩了一下之后,我设法使其工作如下:(仅显示重写的代码行)

QueryParser qp2 = new QueryParser("StateProperties.IsActive", new StandardAnalyzer());
Query query2 = qp2.Parse("True");
booleanQuery.Add(query2, BooleanClause.Occur.MUST);

有谁知道为什么会这样? 我检查了Lucene dll版本,并在两个站点中都使用了相同的版本(2.9.2.2)

我在SITE A中编写的代码是错误的吗? SITE B代码错了吗? 这是我的错吗?可以生产服务器这样的救护车吗?

1 个答案:

答案 0 :(得分:1)

他们在磁盘上没有单独的索引吗?如果它们的索引方式不同,它们也会返回不同的结果。有一点我想到的是,如果存在某种重要的区分大小写,那么TermQuery将寻找一个完全匹配,其中解析器将尝试根据分析器对搜索项进行标记/过滤(并可能搜索“真实”而不是“真实”。