如何在 Solr 9.5 中使用 OR 条件组合两个独立查询

问题描述 投票:0回答:2

我正在使用 Solr 9.5,并且有两个单独的查询可以成功运行。但是,我需要使用 OR 条件组合这两个查询,并且我不确定如何实现这一点。上下文正在查询嵌套文档结构,以下是我正在使用的查询:

sudo curl 'http://localhost:8983/solr/gettingstart/select?fl=*,[child]' -d 'omitHeader=true' --data-urlencode 'q={!parent which="*:* -_nest_path_:*"}(+_nest_path_:\/productCategories +name_hh:*necessitatibus*)'
sudo curl 'http://localhost:8983/solr/gettingstart/select?fl=*,[child]' -d 'omitHeader=true' --data-urlencode 'q=brandName_hh:*Preda*'

我希望将这两个查询与 OR 条件组合起来,以便结果集包含与这两个查询之一匹配的记录。谁能指导我如何修改这些查询来实现这一目标?

我尝试过的:

我尝试使用 OR 运算符连接查询,但语法不正确,或者该方法存在根本缺陷。 我还在 Solr 文档中搜索了组合查询,但没有找到与我的场景非常匹配的场景。 任何有关如何实现这一目标的指导或示例将不胜感激。谢谢!

solr
2个回答
0
投票

我尝试了这个查询,它通过使用适当的括号和查询解析器,并将父子文档过滤器与 OR 运算符结合起来,对我有用。

({!child of="*:* -_nest_path_:*"}) OR ({!parent which="*:* -_nest_path_:*"})

这基本上形成如下查询:

"rawquerystring":"({!child of=\"*:* -_nest_path_:*\"}) OR ({!parent which=\"*:* -_nest_path_:*\"})",

"querystring":"({!child of=\"*:* -_nest_path_:*\"}) OR ({!parent which=\"*:* -_nest_path_:*\"})",

"parsedquery":"BitSetProducerQuery(BitSetProducerQuery(QueryBitSetProducer(+*:* -(*:* -FieldExistsQuery [field=_nest_path_])))) BitSetProducerQuery(BitSetProducerQuery(QueryBitSetProducer(*:* -FieldExistsQuery [field=_nest_path_])))",

"parsedquery_toString":"BitSetProducerQuery(QueryBitSetProducer(+*:* -(*:* -FieldExistsQuery [field=_nest_path_]))) BitSetProducerQuery(QueryBitSetProducer(*:* -FieldExistsQuery [field=_nest_path_]))"

希望这有帮助!谢谢。


0
投票

请查看 Solr 参考指南中记录的布尔查询解析器:https://solr.apache.org/guide/solr/latest/query-guide/other-parsers.html#boolean-query-parser

您可以使用布尔查询作为最顶层的查询,并将其他两个查询作为“应该”子句添加到布尔值中。在下面的示例中,我们将每个子查询放在单独的 http 请求参数中,并在 bool 查询中使用

$q2
$q3
引用这些参数:

fl=*,[child]
q={!bool should=$q2 should=$q3}
q2={!parent which="*:* -_nest_path_:*"}(+_nest_path_:\/productCategories +name_hh:*necessitatibus*)
q3=brandName_hh:*Preda*

还有其他方法可以实现相同的目的,例如使用此处记录的 JSON 请求 API https://solr.apache.org/guide/solr/latest/query-guide/json-query-dsl.html。这对于非常大且复杂的查询可能很有用。

© www.soinside.com 2019 - 2024. All rights reserved.