Как добавить запрос на повышение с помощью SolrQuery - PullRequest
0 голосов
/ 07 июня 2019

Я использую 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.

Так что яесть два вопроса

  1. Есть ли способ добавить boostquery с объектом SolrQuery
  2. Есть ли метод, в котором я могу напрямую выполнить переданный URL и получить результат.

EDIT1:

Если кто-нибудь найдет способы оптимизировать код или рекомендации по изменению логики, это действительно поможет мне.

EDIT2:

Есть лиметод, где я могу выполнить запрос напрямую с помощью PHP?

1 Ответ

1 голос
/ 07 июня 2019

Простое создание объекта и установка для него значения, а затем ничего не делать с ним не принесет ничего полезного. Так что эта часть ни на что не влияет:

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

Вместо этого создайте запрос как SolrDisMaxQuery вместо SolrQuery:

$query = new SolrDisMaxQuery();

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

Таким образом, вы можете установить параметры, относящиеся к анализатору запросов DisMax.

SolrDisMaxQuery расширяет SolrQuery, поэтому его можно использовать так же, как и в предыдущем классе.

...