我正在使用像
这样的查询criteria = (sql OR sqlserver OR "sql server") AND java AND delphi .
在这种情况下,当我使用默认解析器作为下面的代码时提到:
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field, analyzer);
Query query = parser.parse(criteria);
当我在下面的代码中使用 QueryParser.OR_OPERATOR 时,我得到相同数量的文档:
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field, analyzer);
parser.setDefaultOperator(QueryParser.OR_OPERATOR);
Query query = parser.parse(criteria);
这是不正确的。 请!建议我可行的解决方案
如果在搜索条件中出现多个布尔查询,怎么能得到正确的文档?
答案 0 :(得分:0)
如果您的查询指定了运算符:
criteria =(sql OR sqlserver或“sql server”)和java AND delphi
然后设置默认运算符无效。如果您已按如下方式指定了查询:
criteria =(sql sqlserver“sql server”)java delphi
然后将默认运算符设置为OR将导致查询解释为:
criteria =(sql OR sqlserver或“sql server”)或java OR delphi
顺便说一句,QueryParser的默认运算符是OR - 请参阅Lucene QueryParser javadoc
答案 1 :(得分:0)
从您的代码中,您的查询将搜索索引中的所有文档,其中字段包含术语“java”和“delphi”,以及{sql,sqlserver,“sql server”}中的一个或多个。你所呈现的内容在语法上或概念上都没有任何错误,所以我怀疑问题在于如何将字段编入索引。我建议选择Luke并使用它来分析您的索引。