我正在搜索我们的某个网站:(网站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代码错了吗? 这是我的错吗?可以生产服务器这样的救护车吗?
答案 0 :(得分:1)
他们在磁盘上没有单独的索引吗?如果它们的索引方式不同,它们也会返回不同的结果。有一点我想到的是,如果存在某种重要的区分大小写,那么TermQuery将寻找一个完全匹配,其中解析器将尝试根据分析器对搜索项进行标记/过滤(并可能搜索“真实”而不是“真实”。