【问题标题】:SOLR Solarium can we use filter-queries with dismax-queries?SOLR Solarium 我们可以使用过滤查询和 dismax 查询吗?
【发布时间】:2020-07-29 04:07:13
【问题描述】:

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

我们构建了一个“巨大”的过滤查询集合:

$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 来将我们的搜索“扩展”到多个字段(带有提升)吗?还是我们必须真正返工?

我有点错过大局来决定最佳/可行的解决方案是什么

非常感谢您的帮助

编辑:

索尔:

solr-spec 7.6.0

日光浴室:

solarium/solarium                    6.0.1   PHP Solr client

【问题讨论】:

    标签: solr solarium


    【解决方案1】:

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

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

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

    如果一个局部参数值没有名字出现,它被赋予隐含的名字“type”。这允许在解析查询字符串时使用查询解析器类型的短格式表示。

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

    【讨论】:

    • 感谢 Mats 的精彩回答!现在有了这个概念,并使用日光浴室应用了所有东西 - 就像一个魅力
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多