Клуб Яндекс.Поиска для сайта

Фильтрация по param (e_param_<id>), проблема category_id

khannanov.aynur
16 мая, 22:01

Доброго времени
Уточните пожта, как правильно через API сделать фильтрацию по параметру? Допустим имеем след. ответ от API:

[documents] => Array(
....

[18] => Array
(
    [id] => 1405015
    [name] => something
    [description] => тонкий и легкий гаджет...
    [url] => http://site
    [categoryId] => 39
    [categoryParents] => Array
        (
            [0] => 39
        )

    [price] => 30990
    [currencyId] => RUB
    [vendor] => 
    [snippet] => 
    [origSnippet] => 2.jpg
    [mobileSnippet] => 
    [parameters] => Array
        (
            [0] => Array
                (
                    [name] => Количество
                    [value] => 0
                    [unit] => 
                )

            [1] => Array
                (
                    [name] => Новинка
                    [value] => 
                    [unit] => 
                )

            [2] => Array
                (
                    [name] => Объем памяти
                    [value] => 16 ГБ
                    [unit] => 
                )

            [3] => Array
                (
                    [name] => Раздел1
                    [value] => Раздел1
                    [unit] => 
                )

            [4] => Array
                (
                    [name] => Раздел2
                    [value] => Раздел2
                    [unit] => 
                )
        )
    [available] => 1
    [oldPrice] => 
)


Я хочу сделать выборку по всем товарам с 16Гб памяти. Для этого, исходя из док-ции, мне нужно указать след параметры запроса:
&category_id=39
и
&e_param_<id>=16+ГБ

Вопрос: откуда взять id для параметра?
При этом, если задать просто поиск с &category_id=39

https://catalogapi.site.yandex.net/v1.0?apikey=11111&text=фззду&searchid=2298569&per_page=19&category_id=39

то ничего не находится

15 комментариев
Подписаться на комментарии к посту
firstlena.pershina
16 мая, 22:13
Добрый день!
Нашли проблему, сейчас исправляем. Исправим в ближайшее время. 
khannanov.aynur
17 мая, 11:05
Доброго времени
Заметил по сегодняшней ночной выдаче, что указание category_id в запросе к API теперь не приводит к пустому ответу, видимо починили, спасибо

Сразу, как заработала эта выдача, стало понятно, откуда брать param_id:

 [enumParameters] => Array
(
[0] => Array
(
[param_id] => 14431
[name] => Количество
[unit_name] =>
[values] => Array

Получается, что нужно в любом случае делать сначала поиск по конкретной category_id, чтобы узнать id`шники параметров? Это означает, что фильтрация должны быть последовательной:
1) выбираешь категорию в фильтре
2) получаешь результат со списком параметров(с param_id)
3)выводишь новые блоки для фильтрации по параметрам?
А прямого способа узнать id параметра нет? Может с помощью какого-то отдельного запроса без категории? Не очень хочется делать костыли

При текущем тестировании заметил, что теперь не работает простой поиск:
https://catalogapi.site.yandex.net/v1.0?apikey=1fa...c5&text=iphone&searchid=2298569&per_page=19
http://joxi.ru/D2P4kqVfpvoV12
хотя файл с текстовой фразой в теге <name> у оферов проиндексирован
khannanov.aynur
17 мая, 19:26
Доброго времени
все же по одной из категорий поиск возвращает пустую выборку:
без category_id:
http://joxi.ru/vAW4q5Rf1GZl4r
http://joxi.ru/eAOlxJ0fxdVD3r

с  category_id=39:
http://joxi.ru/eAOlxJ0fxdVdqr

в чем может быть причина? Такое ощущение, что данные в ответе API разнятся с фактическими данными, проиндексированными из файла YML
firstlena.pershina
18 мая, 13:55
khannanov.aynur,
Добрый день!
Проблему исправили, проверьте, пожалуйста. 
Далее ответы на вопросы, которые не были связаны с проблемой: 
1) Нет, прямого способа узнать id параметра, к сожалению, нет.
2) Id параметра зависит от категории. Любой поисковый запрос содержит категорию. Если таковой нет, то пользователю предлагаются те параметры, которые есть у всех товаров из списка.

khannanov.aynur
18 мая, 15:53
Спасибо, работает четко по документации:
https://catalogapi.site.yandex.net/v1.0?apikey=11111&text=iphone&searchid=2298569&per_page=19&category_id=39&e_param_20223=серый+космос&e_param_136=64+ГБ&e_param_136=32+ГБ

выдал именно тот рез-т, который и должен быть
молодцы :)

По ответам:
1)" Нет, прямого способа узнать id параметра, к сожалению, нет."
Ок, прямой способ стал не нужен в тот момент, как к JSON результату добавили св-во param_id к массиву параметров

2)"Id параметра зависит от категории. Любой поисковый запрос содержит категорию. Если таковой нет, то пользователю предлагаются те параметры, которые есть у всех товаров из списка."

с этим не совсем соглашусь, т.к. встретился со след-й ситуацией:

1. Делаю запрос:
https://catalogapi.site.yandex.net/v1.0?apikey=11111&text=ipod&searchid=2298569&per_page=19
2. Получаю в рез-те один из товаров:
 [categoryId] => 86

 [parameters]

...
(
[name] => Раздел2
[value] => iPod touch 5-го поколения
)
3. В это время 
[enumParameters]
...

[param_id] => 114
[name] => Раздел2
[unit_name] =>
[values] => Array( [items] => Array(
[0] => Array(
[value] => iPhone SE
[found] => 0
)
[1] => Array
(
[value] => iPhone 6s
[found] => 0
)
[2] => Array
(
[value] => iPhone 5s
[found] => 0
)
[3] => Array
(
[value] => iPhone 7
[found] => 0
)
[4] => Array
(
[value] => iPhone 6
[found] => 0
)
)
)

То есть в [enumParameters] нет "iPod touch 5-го поколения"


4. Добавляю в запрос категорию
https://catalogapi.site.yandex.net/v1.0?apikey=11111&text=ipod&searchid=2298569&per_page=19&category_id=86

5. Получаю в [enumParameters]:

[param_id] => 1049
[name] => Раздел2
[unit_name] =>
[values] => Array([items] => Array(
[0] => Array
(
[value] => iPod touch 5-го поколения
[found] => 18
)
)
)

То есть если секция не конкретизирована, то значения параметров в [enumParameters] должны прийти все, которые присутствуют у товаров, попавших в выборку, но приходят только по одному типу.
Почему так происходит и можно-ли это поправить?

К просьбам/замечаниям так же хочу отнести следующее:
- в  [enumParameters] св-во [found] у параметров содержит кол-во элементов в общей выборке или на конкретной странице? Значение там не всегда соответствует выборке в [documents]. Можно этот момент проверить /поправить?
- параметры кэшируются для отдачи через API? Сброс кэша привязан к моменту индексации YML?
- возможно добавить сортировку по одному из параметров? Нас интересует сортировка по новинкам, что через стандартные поля запроса не нашли возможность реализовать, хотя параметр новинка передается

Спасибо
khannanov.aynur
18 мая, 15:55
P.S.: момент с [found] важен, т.к. при пагинации нет нормального способа узнать иным образом, у какого числа товара из выборки есть то или иное значение параметра
khannanov.aynur
26 мая, 09:42
Доброго времени
кол-во в found было поправлено, спасибо

Есть-ли возможность добавить сортировку по одному из параметров?

Сейчас наблюдается ситуация, когда поиск идет по "айфон", а в списке разделов в фильтре появляются разделы iPad, при этом айфон и iPad релевантно не связаны, так же есть примеры и других не связанных с айфоном разделов в фильтре.
Почему так происходит, могли бы объяснить. Интересует более чистая выборка результатов

Спасибо
firstlena.pershina
26 мая, 12:20
khannanov.aynur,
Добрый день! Насколько я вижу, вам уже наша поддержка ответила.  У нас тут идёт расширение запроса, по нашим данным это лучше, чем не показывать ничего. Но при жесткой сортировки мы еще раз проверим качество расширения запроса. Спасибо, что обратили наше внимание на это. 
khannanov.aynur
26 мая, 12:42
firstlena.pershina,
Добрый день
У нас нет возможности отсортировать полученную по запросу iphone выборку: сначала новинки(либо товары, если нет новинок), потом аксессуары. Параметр запроса how сейчас принимает сортировку только по цене. В нашем случае в YML передаются тег Новинка, по которому можно было бы сделать сортировку. В простом случае заинтересованы в сортировке по categoryId. Например how=categoryid_2287,categoryid_2289.
То есть сначала в выборку попадают элементы с указанными категориями, а затем уже из всех остальных
Такой функционал реализовать возможно?

Что  касается расширения запроса, то вы говорите, что по запросу "айфон" будет нулевая выдача? То есть в поиск нужно передавать сразу измененный по правильное написание вариант, чтобы не было лишних категорий?

Спасибо
firstlena.pershina
26 мая, 13:06
khannanov.aynur,
Пока это реализовать на нашей стороне нельзя, хотя задача тут понятна. 
khannanov.aynur
26 мая, 13:12
firstlena.pershina,
а когда сможете реализовать?
avch@insite-it.ru
14 июля, 11:27
Доброго времени

Указал в запросе категорию, но в ответе так и не появились поля rangeParameters и enumParameters. В чем может быть причина?
firstlena.pershina
21 июля, 15:20
avch@insite-it.ru,
Нужно на запрос смотреть - можете вопрос продублировать в нашу поддержку? https://yandex.ru/support/site/troubleshooting/feedback.xml 
avch@insite-it.ru
24 июля, 06:16
firstlena.pershina,
Продублировал.
firstlena.pershina
24 июля, 13:34
avch@insite-it.ru,
Спасибо!