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

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

Доброго времени
Уточните пожта, как правильно через 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 комментариев
Елена Першина
16 мая 2017, 22:13
Добрый день!
Нашли проблему, сейчас исправляем. Исправим в ближайшее время. 
khannanov.aynur
17 мая 2017, 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 мая 2017, 19:26
Доброго времени
все же по одной из категорий поиск возвращает пустую выборку:
без category_id:
http://joxi.ru/vAW4q5Rf1GZl4r
http://joxi.ru/eAOlxJ0fxdVD3r

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

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

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

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

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

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

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

Спасибо
Елена Першина
26 мая 2017, 13:06
khannanov.aynur,
Пока это реализовать на нашей стороне нельзя, хотя задача тут понятна. 
khannanov.aynur
26 мая 2017, 13:12
Елена Першина,
а когда сможете реализовать?
Удалённый пользователь
14 июля 2017, 11:26
Доброго времени

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