2011-02-17 73 views
0

我试图用MultiFieldQueryParser执行以下搜索:使用Lucene MultiFieldQueryParser多个必填字段

内容:你好世界的优先级:高

即,我只希望看到的文档返回其包含单词'hello'和'world',并且优先级为'高'。 MultiFieldQueryParser的默认行为似乎返回包含内容的任何内容:hello world OR priority:high - 我无法弄清楚如何改变它。

有什么建议吗?

+0

可能重复(http://stackoverflow.com/questions/450547/how-to-make-lucene-match - 全词-在查询) – 2011-02-18 14:05:32

回答

1

当您想跨多个字段搜索一个术语时,使用MultiFieldQuery。你正在寻找的是一个简单的布尔查询和两个子句。一个查询如下应该工作。

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

这里有一个布尔查询一起Occur.MUST一个条款是,反过来,一个布尔查询两个子句,另一个是词语查询。

0

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

一个例子:[?如何使Lucene的比赛中查询所有的字]

... 
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");