首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene: MultiFieldQueryParser中的布尔或

Lucene: MultiFieldQueryParser中的布尔或
EN

Stack Overflow用户
提问于 2012-01-11 11:02:44
回答 1查看 1.6K关注 0票数 1

我有一个包含10个字段的数据库,我需要构造一个类似于以下伪代码的查询:

代码语言:javascript
复制
theQuery = ((field1 == A) && 
           (field2 == B) && 
           (field3 == C) && 
           (field4 == D) && 
           (field5 == E) && 
           (field6 == F) && 
           (field7 == G) && 
           ((field8 == H) || (field9 == H) || (field10 == H)))

也就是说,我需要字段1-7来明确地包含相应的提供的变量,,我需要变量H一定会出现在8-10字段中的至少一个。

我一直在尝试使用MultiFieldQueryParser,但我遇到的问题是,所提供的BooleanClauses是“必须”、“MUST_NOT”和“应该”,我们可以将MultiFieldQueryParser的默认运算符设置为and或OR。

当我尝试使用和设置字段1-7和字段8-10时,查询解析器基本上忽略了字段8-10,并返回字段1-7中包含指定数据的任何内容。

我还没有尝试将默认操作符设置为OR,因为我猜测查询将返回字段1-10中包含一个或多个提供变量的结果。

对于那些希望看到代码的人,我的代码如下:

代码语言:javascript
复制
ArrayList queries = new ArrayList();
ArrayList fields = new ArrayList();
ArrayList flags = new ArrayList();

if(varA != null && !varA.equals(""))
{
    queries.Add(varA);
    fields.Add("field1");
    flags.Add(BooleanClause.Occur.Must);
}
//... The same for 2-7
if(varH != null && !varH.equals(""))
{
    queries.Add(varA);
    queries.Add(varA);
    queries.Add(varA);
    fields.Add("field8");
    fields.Add("field9");
    fields.Add("field10");
    flags.Add(BooleanClause.Occur.Should);
    flags.Add(BooleanClause.Occur.Should);
    flags.Add(BooleanClause.Occur.Should);
}
Query q = MultiFieldQueryParser.parse(VERSION.LUCENE_34, 
                                      queries.toArray(), 
                                      fields.toArray(),
                                      flags.toArray(),
                                      theAnalyzer);

显然,这在某种程度上简化了,因为ArrayLists没有整齐地返回String和BooleanClause.Occurs的数组,但是您知道了。

有谁知道形成多字段查询的方法,包括布尔和以及布尔ORs?

谢谢你,里克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-11 22:49:18

我不太懂你的表示法,所以很难弄清楚问题出在哪里。但只需使用标准查询:

代码语言:javascript
复制
 BooleanQuery topQuery = new BooleanQuery();
 topQuery.add(new TermQuery(...), BooleanClause.Occur.Must);
 etc.

或者用文本进行解析,让解析器为您解析它:+field1:A +field2:B ...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8818144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档