最近在用Java+Lucene做一个站内搜索项目,在进行检索查询的时候涉及到4个关键字,并且3个是SHOULD,一个是MUST。这样就遇到了问题,根据官方文档说明和实际的测试发现,在检索的时候,如果其中一个字段为MUST,Searcher就会忽略其他的关键字。

    为了解决这个问题,查了很多方法,最后用Filter解决了。解决方法为:把应为MUST来查询的字段,根据他的规律创建一个TermRangeFilter(根据你的实际情况来决定用哪个Filter),在检索时,用Searcher的search(Query,Filter,Integer.MAX_VALUE);方法实现就可以了。

注:多字段时,Query我使用的是BooleanQuery。