我刚刚构建了一个由 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"));
....
但是我们意识到搜索只是命中我们在过滤器查询中指定的所有单个字段,但我们实际上必须查询多个字段。
在阅读文档时,我意识到我们可能是错的,对吧?正确的方法是使用 disMax 查询(与构面结合?)?
我想知道,我们是否可以将 DisMax 与过滤器查询结合使用,将我们的搜索“扩展”到多个字段(带有增强功能)?或者我们真的必须重新设计所有东西吗?
我有点错过大局来决定什么是最好/有效的解决方案。
非常感谢您的帮助。
编辑:
索尔:
solr-spec 7.6.0
日光浴室:
solarium/solarium 6.0.1 PHP Solr client
您可以在给出
fq
参数时给出查询解析器:
fq={!dismax qf="firstfield secondfield^5"}this is my query
该语法称为“本地参数”。由于 dismax
(或您现在通常应该使用的
edismax
)前面没有标识符,因此它被隐式解析为类型。
如果本地参数值没有名称出现,则为其赋予隐式名称“type”。这允许在解析查询字符串时使用查询解析器类型的简短形式表示。您必须确保 Solarium 不会逃脱您赋予
setQuery
的值,但鉴于您已经给出了
field:value
组合,它似乎并没有逃脱。仔细检查 Solr 日志,准确查看发送到 Solr 的查询(或者要求 Solarium 为您提供发送的确切查询字符串(如果可能)。