【发布时间】:2019-06-07 11:28:10
【问题描述】:
我正在使用 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 类中没有看到任何添加此功能的函数,但在 SolrDisMaxQuery https://php.net/manual/en/solrdismaxquery.addboostquery.php 中看到了一个函数@
但这显然不会将 bq 添加到当前 SolrQuery 对象中。
所以我有两个问题
- 有没有办法用 SolrQuery 对象添加 boostquery
- 有没有方法可以直接执行传过来的URL,得到结果。
编辑1:
如果有人找到优化代码的方法或对逻辑更改提出建议,那真的会帮到我。
编辑2:
有没有可以直接使用 PHP 执行查询的方法?
【问题讨论】:
标签: php solr solr-query-syntax