Я использую SolrClient для соединения с базой данных и следую примеру из https://www.php.net/manual/en/book.solr.php
Я пытаюсь сгенерировать запрос, который я создал, через панель управления solr
URL / магазин / выберите д = * & рода = brand_logo_value + убывание, созданный + убывание и начать = 0 & строк = 12 & огранку = ложь и отступы = истина & FQ = final_price:! 0 & FQ = img_flag: 0 & omitHeader = True & FQ = (v_index_flag: 1 + OR + v_index_flag: 4 + или + v_index_flag: 99) & П = идентификатор, store_for, store_id, идентификатор_пользователь, PRODUCT_TITLE, final_price, store_from, продавец, Product1, сайт, product_id, company_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.field = parent_id & group.sort = final_price + по возрастанию & Бк = uniq_text: (% 22refurbish% 22 ^ -1000) & Бк = brand_logo_value: (% 221% 22 ^ 5) & FQ = category_name_small:% 22electronics + и + техника% 22 & FQ = sub_category_name_small:% 22air + кондиционеры% 22 & json.facet = {категории: {тип: термины, поле: cat_subcat_type_small, сортировать: {парent_unique: desc}, фасет: {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.
Так что яесть два вопроса
- Есть ли способ добавить boostquery с объектом SolrQuery
- Есть ли метод, в котором я могу напрямую выполнить переданный URL и получить результат.
EDIT1:
Если кто-нибудь найдет способы оптимизировать код или рекомендации по изменению логики, это действительно поможет мне.
EDIT2:
Есть лиметод, где я могу выполнить запрос напрямую с помощью PHP?