如何使用 SolrQuery 添加提升查询

How to add a boost query using SolrQuery

我正在使用 SolrClient 连接数据库并遵循 https://www.php.net/manual/en/book.solr.php

中的示例

我正在尝试生成我通过 solr 仪表板创建的查询

URL/shop/select?q=*&sort=brand_logo_value+desc,created+desc&start=0&rows=12&facet=false&indent=true&fq=!final_price:0&fq=!img_flag:0&omitHeader=true&fq=(v_index_flag:1+OR+v_index_flag:4+OR+v_index_flag:99)&fl=id,store_for,store_id,user_id,product_title,final_price,store_from,seller,product1,website,product_id,company_name,category_name,sub_category_name,discount_percentage,list_price,affiliate_name,v_index_flag,parent_id,category_name_small,sub_category_name_small,type_small&group=true&group.field=parent_id&group.sort=final_price+asc&bq=uniq_text:(%22refurbish%22^-1000)&bq=brand_logo_value:(%221%22^5)&fq=category_name_small:%22electronics+and+appliances%22&fq=sub_category_name_small:%22air+conditioners%22&json.facet={categories:{type:terms,field:cat_subcat_type_small,sort:{parent_unique:desc},facet:{parent_unique:%22unique(parent_id)%22}}}&wt=json

我正在做的是将整个 URL 传递到 php 页面并分解为单独的部分并添加创建查询

$query = new SolrQuery();
        foreach ($sections as $field) {
            $cut = explode("=", $field);
            echo "<br>" . $cut[0] . "===>" . $cut[1];
            switch ($cut[0]) {

            case 'fq':
                $query->setFacet(true);
                $query->addFilterQuery(str_replace("+", " ", $cut[1]));
                break;
            case 'sort':

                $cut2 = explode(",", $cut[1]);
                $SortOrder['asc'] = SolrQuery::ORDER_ASC;
                $SortOrder['desc'] = SolrQuery::ORDER_DESC;
                foreach ($cut2 as $slice) {
                    $bite = explode("+", $slice);
                    $query->addSortField($bite[0], $SortOrder[$bite[1]]);
                }
                break;

            case 'bq':
                $cut2 = explode(":", $cut[1]);
                $dismaxQuery = new SolrDisMaxQuery();
                $dismaxQuery->addBoostQuery($cut2[0], $cut2[1]);

                break;

            case 'group.sort':

                $cut2 = explode(",", $cut[1]);
                $SortOrder['asc'] = SolrQuery::ORDER_ASC;
                $SortOrder['desc'] = SolrQuery::ORDER_DESC;
                foreach ($cut2 as $slice) {
                    $bite = explode("+", $slice);
                    $query->addGroupSortField($bite[0], $SortOrder[$bite[1]]);
                }
                break;

            default:

                $query->setParam($cut[0], $cut[1]);
            }

        }

代码尚未优化。一切正常,但 BoostQuery(bq) 除外。我在 SolrQuery class 中没有看到任何函数来添加这个,但在 SolrDisMaxQuery https://php.net/manual/en/solrdismaxquery.addboostquery.php

中看到了一个

但这显然不是将 bq 添加到当前 SolrQuery 对象。

所以我有两个问题

  1. 有没有一种方法可以添加带有 SolrQuery 对象的 boostquery
  2. 有什么方法可以直接执行传过来的URL得到结果

编辑 1:

如果有人找到优化代码的方法或逻辑更改的建议,那将真正帮助我。

编辑 2:

有没有一种方法可以让我直接使用 PHP 执行查询?

仅仅创建一个对象并为其设置一个值——然后什么都不做,不会有任何用处。所以这部分不影响任何东西:

$dismaxQuery = new SolrDisMaxQuery();
$dismaxQuery->addBoostQuery($cut2[0], $cut2[1]);

相反,将查询创建为 SolrDisMaxQuery 而不是 SolrQuery:

$query = new SolrDisMaxQuery();

foreach ($sections as $field) {
   ...
}

这样您就可以设置特定于 DisMax 查询解析器的参数。

SolrDisMaxQuery 扩展了 SolrQuery,因此可以像您之前的 class.

一样使用它