为什么在 Lucene.net 上使用 BooleanQuery 时第一个查询有效而第二个查询无效?
这是在 SHOPPING 字段上编入索引的示例:
Shoes for sale
Great bargain on shoes and accessories.
Buy cheap Shoes, Sneekers and Heels!
第一个查询(运行良好,它返回所有三个索引)。
Query query = MultiFieldQueryParser.Parse(Lucene.Net.Util.Version.LUCENE_30,
"Shoes", new String[] { "SHOPPING" }, new Occur[] { Occur.SHOULD },
new SimpleAnalyzer()
);
hits = indexSearcher.search(query);
第二个查询(不返回任何内容,条件是:返回所有带有“shoes”但没有“accessories”的术语)。
Query query1 = new TermQuery(new Term("SHOPPING", "shoes"));
Query query2 = new TermQuery(new Term("SHOPPING", "accessories"));
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(query1, Occur.SHOULD);
booleanQuery.Add(query2, Occur.MUST_NOT);
hits = indexSearcher.search(booleanQuery);
最佳答案
我想我明白了。假设结合使用 MultiFieldQueryParser 和 BooleanQuery 来解决问题。
Query query = MultiFieldQueryParser.Parse(Lucene.Net.Util.Version.LUCENE_30, "Shoes", new String[] { "SHOPPING" }, new SimpleAnalyzer());
Query queryOrig = parser.Parse("shoes");
Query queryOrig2 = parser.Parse("accessories");
var booleanQuery= new BooleanQuery();
booleanQuery.Add(queryOrig, Occur.MUST);
booleanQuery.Add(queryOrig2, Occur.MUST_NOT);
hits = indexSearcher.search(booleanQuery);
关于c# - BooleanQuery 无法使用 Lucene.net 3.0.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34326191/