我正在使用 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 文档中搜索了组合查询,但没有找到与我的场景非常匹配的场景。 任何有关如何实现这一目标的指导或示例将不胜感激。谢谢!
我尝试了这个查询,它通过使用适当的括号和查询解析器,并将父子文档过滤器与 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_]))"
希望这有帮助!谢谢。
请查看 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。这对于非常大且复杂的查询可能很有用。