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

SOLR Solarium can we use filter-queries with dismax-queries?

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

我们构建了一个“庞大”的过滤器查询集合,就像那个:

$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"));
....

但我们意识到搜索只会命中我们在过滤器查询中指定的所有单个字段,但我们实际上必须查询多个字段。在阅读文档时我意识到我们可能错了,对吧?正确的方法是使用 disMax 查询(结合构面?)?我想知道,我们可以将 DisMax 与 filterqueries 结合使用以将我们的搜索“扩展”到多个字段(带有提升)吗?还是我们必须实际返工所有内容?

我有点缺少全局来决定 best/working 解决方案是什么

非常感谢帮助

编辑:

解决方案:

solr-spec 7.6.0

日光浴室:

solarium/solarium                    6.0.1   PHP Solr client

您可以在给出 fq 参数时给出一个查询解析器:

fq={!dismax qf="firstfield secondfield^5"}this is my query

语法称为Local Parameters。由于 dismax(或您现在通常应该使用的 edismax)前面没有标识符,因此它被隐式解析为类型。

If a local parameter value appears without a name, it is given the implicit name of "type". This allows short-form representation for the type of query parser to use when parsing a query string.

您必须确保 Solarium 不会逃脱您给 setQuery 的值,但鉴于您已经给出了 field:value 组合,它似乎没有逃脱。仔细检查 Solr 日志以查看发送到 Solr 的确切查询(或者如果可能的话,请 Solrium 为您提供发送的确切查询字符串)。