gpt4 book ai didi

java - Lucene:MultiFieldQueryParser 中的 boolean OR

转载 作者:行者123 更新时间:2023-12-01 05:32:03 27 4
gpt4 key购买 nike

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

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、MUST_NOT 和 SHOULD,并且我们可以将 MultiFieldQueryParser 的默认运算符设置为 AND 或 OR。

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

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

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

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

显然这有点简化,因为 ArrayList 并没有整齐地返回字符串和 BooleanClause.Occurs 数组,但你明白了。

有谁知道形成多字段查询的方法,包括 boolean AND boolean OR?

谢谢,瑞克

最佳答案

我不太明白你的符号,所以很难弄清楚问题出在哪里。但只需使用标准查询:

 BooleanQuery topQuery = new BooleanQuery();
topQuery.add(new TermQuery(...), BooleanClause.Occur.Must);
etc.

或者只是以文本形式进行,然后让解析器为您解析:+field1:A +field2:B ...

关于java - Lucene:MultiFieldQueryParser 中的 boolean OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com