Java 对多个必填字段使用Lucene MultiFieldQueryParser

Java 对多个必填字段使用Lucene MultiFieldQueryParser,java,apache,lucene,Java,Apache,Lucene,我正在尝试使用MultiFieldQueryParser执行以下搜索: 内容:hello world优先级:高 i、 例如,我只想看到返回的文档包含单词“hello”和“world”,并且优先级为“high”。MultiFieldQueryParser的默认行为似乎返回任何包含内容的内容:hello world或priority:high-我不知道如何更改它 有什么建议吗?当您要在多个字段中搜索一个术语时,可以使用多字段查询。您要查找的是一个包含两个子句的简单布尔查询。下面的查询应该可以工作 +

我正在尝试使用MultiFieldQueryParser执行以下搜索:

内容:hello world优先级:高

i、 例如,我只想看到返回的文档包含单词“hello”和“world”,并且优先级为“high”。MultiFieldQueryParser的默认行为似乎返回任何包含内容的内容:hello world或priority:high-我不知道如何更改它


有什么建议吗?

当您要在多个字段中搜索一个术语时,可以使用多字段查询。您要查找的是一个包含两个子句的简单布尔查询。下面的查询应该可以工作

+(+contents:hello +contents:world) +priority:high

这里有一个布尔查询,其中包含to occurrent.MUST子句,一个是布尔查询,两个子句,另一个是术语查询。

您可以通过
setDefaultOperator
方法为解析器设置默认运算符

例如:

...
Analyzer userTermsAnalyzer = searchFactory.getAnalyzer(MyEntity.class);
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_CURRENT, new String[]{"text"}, userTermsAnalyzer);
queryParser.setDefaultOperator(QueryParser.Operator.AND);
Query taskQuery = queryParser.parse("contents:hello world priority:high");
可能重复的