我正在尝试使用MultiFieldQueryParser执行以下搜索:
内容:你好世界优先:高
即,我只想看到返回的文件,其中包含“hello”和“world”字样,优先级为“high”。 MultiFieldQueryParser的默认行为似乎返回任何包含内容的内容:hello world OR priority:high - 我无法弄清楚如何更改它。
有什么建议吗?
答案 0 :(得分:1)
如果要跨多个字段搜索术语,则使用MultiFieldQuery。您正在寻找的是一个带有两个子句的简单布尔查询。如下查询应该有效。
+(+contents:hello +contents:world) +priority:high
这里有一个布局查询,其中Occur.MUST子句是一个布尔查询两个子句,另一个是术语查询。
答案 1 :(得分:0)
您可以通过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");