我试图用MultiFieldQueryParser执行以下搜索:使用Lucene MultiFieldQueryParser多个必填字段
内容:你好世界的优先级:高
即,我只希望看到的文档返回其包含单词'hello'和'world',并且优先级为'高'。 MultiFieldQueryParser的默认行为似乎返回包含内容的任何内容:hello world OR priority:high - 我无法弄清楚如何改变它。
有什么建议吗?
我试图用MultiFieldQueryParser执行以下搜索:使用Lucene MultiFieldQueryParser多个必填字段
内容:你好世界的优先级:高
即,我只希望看到的文档返回其包含单词'hello'和'world',并且优先级为'高'。 MultiFieldQueryParser的默认行为似乎返回包含内容的任何内容:hello world OR priority:high - 我无法弄清楚如何改变它。
有什么建议吗?
当您想跨多个字段搜索一个术语时,使用MultiFieldQuery。你正在寻找的是一个简单的布尔查询和两个子句。一个查询如下应该工作。
+(+contents:hello +contents:world) +priority:high
这里有一个布尔查询一起Occur.MUST一个条款是,反过来,一个布尔查询两个子句,另一个是词语查询。
您可以通过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");
的
可能重复(http://stackoverflow.com/questions/450547/how-to-make-lucene-match - 全词-在查询) – 2011-02-18 14:05:32