SOLR Solarium我们可以将过滤查询与Demax查询一起使用吗?

SOLR Solarium我们可以将过滤查询与Demax查询一起使用吗?,solr,solarium,Solr,Solarium,我刚刚构建了一个由solr支持的搜索表单,我们正在使用solarium库构建我们的请求 我们构建了一个“庞大”的过滤器查询集合,如下所示: $query = $client->createQuery($client::QUERY_SELECT); $query->setStart(0)->setRows(1000); $query->addFilterQuery($query->createFilterQuery("foo")->setQu

我刚刚构建了一个由solr支持的搜索表单,我们正在使用solarium库构建我们的请求

我们构建了一个“庞大”的过滤器查询集合,如下所示:

$query = $client->createQuery($client::QUERY_SELECT);
$query->setStart(0)->setRows(1000);
$query->addFilterQuery($query->createFilterQuery("foo")->setQuery("bar:true"));
$query->addFilterQuery($query->createFilterQuery("fo")->setQuery("ba:false"));
....
但我们意识到搜索只会命中我们在filterqueries中指定的所有单个字段,但实际上我们必须查询多个字段。在阅读文档时,我意识到我们可能错了,对吗?正确的方法是使用demax查询(与facet结合使用?)?我想知道,我们是否可以将Demax与filterqueries结合使用,将搜索“扩展”到多个字段(具有增强功能)?还是我们真的要重做每件事

我有点错过了决定最佳/有效解决方案的大局

非常感谢你的帮助

编辑:

解决方案:

日光浴室:

solarium/solarium                    6.0.1   PHP Solr client

您可以在提供
fq
参数时提供查询解析器:

fq={!dismax qf="firstfield secondfield^5"}this is my query
该语法称为。由于
dismax
(或者您现在通常应该使用的
edismax
)前面没有标识符,因此它被隐式解析为类型

如果出现的局部参数值没有名称,则会给它一个隐式名称“type”。这允许在解析查询字符串时使用查询解析器类型的简短形式表示


您必须确保Solarium不会逃逸您给
setQuery
的值,但鉴于您已经给了一个
字段:value
组合,它似乎不会逃逸。仔细检查Solr日志,查看到底是什么查询发送到Solr(或者如果可能的话,请Solarium向您提供发送的确切查询字符串)。

感谢您提供了漂亮的答案!现在就有了这个概念,并利用日光浴室应用了所有的东西——效果很好
fq={!dismax qf="firstfield secondfield^5"}this is my query