问题描述
比如我要搜索含“房间”一词的文档,同时将含有“白色”字眼的搜索结果给筛掉,请问应该怎么写呢?之前从Lucene的API手册上发现有一个org.apache.lucene.search.TermsFilter的类可能可以实现这个功能,但在写代码的时候却老是引入不了这个类。不知道这个类放在哪个jar包里。。当然,如果有其它更好的方法的话也可以分享一下。 问题补充:beneo 写道
解决方案
TermsFilter不是要你引入的,而是要和FilteredQuery一起用的。。此外,TermsFilter不是过滤掉你不要的,而是只获得含有这些terms的doc集合构建一个BooleanQueryBooleanQuery bq = new BooleanQuery();TermQuery tq = new TermQuery(new Term(k, v));// 添加你自己的查询bq.add(xx, BooleanClause.Occur.MUST);bq.add(tq, BooleanClause.Occur.MUST_NOT );searcher.search(bq, ...);
解决方案二:
有如此多的query可以用你不妨自己寻找,出现问题我们可以一起交流 <li> {@link TermQuery} <li> {@link MultiTermQuery} <li> {@link BooleanQuery} <li> {@link WildcardQuery} <li> {@link PhraseQuery} <li> {@link PrefixQuery} <li> {@link MultiPhraseQuery} <li> {@link FuzzyQuery} <li> {@link TermRangeQuery} <li> {@link NumericRangeQuery} <li> {@link org.apache.lucene.search.spans.SpanQuery}
解决方案三:
TermsFilter不是要你引入的,而是要和FilteredQuery一起用的。。