Magento2 REST 搜索 "Query does not exists"
Magento2 REST Search "Query does not exists"
我正在使用 Mangento 2.0.3 CE,我正在尝试调用 /search
REST API。
有了这个请求:
/rest/V1/search?searchCriteria[requestName]=quick_search_container&searchCriteria[filterGroups][0][filters][0][field]=name&searchCriteria[filterGroups][0][filters][0][value]=%test%&searchCriteria[filterGroups][0][filters][0][condition_type]=like
我收到这个错误:
{
"message": "Query quick_search_container does not exist",
"trace": "#0 vendor/magento/framework/Search/Request/Mapper.php(94): Magento\Framework\Search\Request\Mapper->mapQuery('quick_search_co...')\n#1 vendor/magento/framework/Search/Request/Builder.php(183): Magento\Framework\Search\Request\Mapper->getRootQuery()\n#2 vendor/magento/framework/Search/Request/Builder.php(141): Magento\Framework\Search\Request\Builder->convert(Array)\n#3 vendor/magento/framework/Search/Search.php(71): Magento\Framework\Search\Request\Builder->create()\n#4 [internal function]: Magento\Framework\Search\Search->search(Object(Magento\Framework\Api\Search\SearchCriteria))\n#5 vendor/magento/module-webapi/Controller/Rest.php(265): call_user_func_array(Array, Array)\n#6 vendor/magento/module-webapi/Controller/Rest.php(160): Magento\Webapi\Controller\Rest->processApiRequest()\n#7 var/generation/Magento/Webapi/Controller/Rest/Interceptor.php(24): Magento\Webapi\Controller\Rest->dispatch(Object(Magento\Framework\App\Request\Http))\n#8 vendor/magento/framework/App/Http.php(115): Magento\Webapi\Controller\Rest\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))\n#9 vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()\n#10 index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))\n#11 {main}"
}
如果我从查询中删除 search?searchCriteria[requestName]=quick_search_container
,我会收到此错误 Request name not defined.
我设置了一个类别 "CatTest" 和一个应该出现在结果中的简单产品 "ProdTest"。
有人知道如何解决这个错误吗?
[编辑]
进一步挖掘后,我发现在 class vendor/magento/framework/Search/Request/Builder.php
l.137 中,clean
方法 whipout $data
var。
然后引发给定的异常。
其实问题出在我的请求是错误的。
对于搜索 API 正确的请求是(将转换为 GET 请求):
{
"searchCriteria" : {
"requestName": "quick_search_container",
"filterGroups": [
{
"filters": [
{
"field": "search_term",
"value": "*"
}
]
}
],
"current_page": 1,
"page_size": 20
}
}
对于来到这里但没有理解答案含义的任何人:
http://your-siteurl.com/rest/V1/search?searchCriteria[requestName]=quick_search_container
&searchCriteria[filterGroups][0][filters][0][field]=search_term
&searchCriteria[filterGroups][0][filters][0][value]=Life
&searchCriteria[sortOrders][0][field]=created_at
&searchCriteria[sortOrders][0][direction]=DESC
&searchCriteria[pageSize]=10
这里我按名字搜索=喜欢。我们使用quick_search_container。重要的是 search_term,因为我们可以使用它进行快速搜索而不是使用 searchCriteria 进行搜索。
您可以查看文件
vendor/magento/module-catalog-search/etc/search_request.xml
了解更多信息
我正在使用 Mangento 2.0.3 CE,我正在尝试调用 /search
REST API。
有了这个请求:
/rest/V1/search?searchCriteria[requestName]=quick_search_container&searchCriteria[filterGroups][0][filters][0][field]=name&searchCriteria[filterGroups][0][filters][0][value]=%test%&searchCriteria[filterGroups][0][filters][0][condition_type]=like
我收到这个错误:
{
"message": "Query quick_search_container does not exist",
"trace": "#0 vendor/magento/framework/Search/Request/Mapper.php(94): Magento\Framework\Search\Request\Mapper->mapQuery('quick_search_co...')\n#1 vendor/magento/framework/Search/Request/Builder.php(183): Magento\Framework\Search\Request\Mapper->getRootQuery()\n#2 vendor/magento/framework/Search/Request/Builder.php(141): Magento\Framework\Search\Request\Builder->convert(Array)\n#3 vendor/magento/framework/Search/Search.php(71): Magento\Framework\Search\Request\Builder->create()\n#4 [internal function]: Magento\Framework\Search\Search->search(Object(Magento\Framework\Api\Search\SearchCriteria))\n#5 vendor/magento/module-webapi/Controller/Rest.php(265): call_user_func_array(Array, Array)\n#6 vendor/magento/module-webapi/Controller/Rest.php(160): Magento\Webapi\Controller\Rest->processApiRequest()\n#7 var/generation/Magento/Webapi/Controller/Rest/Interceptor.php(24): Magento\Webapi\Controller\Rest->dispatch(Object(Magento\Framework\App\Request\Http))\n#8 vendor/magento/framework/App/Http.php(115): Magento\Webapi\Controller\Rest\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))\n#9 vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()\n#10 index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))\n#11 {main}"
}
如果我从查询中删除 search?searchCriteria[requestName]=quick_search_container
,我会收到此错误 Request name not defined.
我设置了一个类别 "CatTest" 和一个应该出现在结果中的简单产品 "ProdTest"。
有人知道如何解决这个错误吗?
[编辑]
进一步挖掘后,我发现在 class vendor/magento/framework/Search/Request/Builder.php
l.137 中,clean
方法 whipout $data
var。
然后引发给定的异常。
其实问题出在我的请求是错误的。
对于搜索 API 正确的请求是(将转换为 GET 请求):
{
"searchCriteria" : {
"requestName": "quick_search_container",
"filterGroups": [
{
"filters": [
{
"field": "search_term",
"value": "*"
}
]
}
],
"current_page": 1,
"page_size": 20
}
}
对于来到这里但没有理解答案含义的任何人:
http://your-siteurl.com/rest/V1/search?searchCriteria[requestName]=quick_search_container
&searchCriteria[filterGroups][0][filters][0][field]=search_term
&searchCriteria[filterGroups][0][filters][0][value]=Life
&searchCriteria[sortOrders][0][field]=created_at
&searchCriteria[sortOrders][0][direction]=DESC
&searchCriteria[pageSize]=10
这里我按名字搜索=喜欢。我们使用quick_search_container。重要的是 search_term,因为我们可以使用它进行快速搜索而不是使用 searchCriteria 进行搜索。
您可以查看文件
vendor/magento/module-catalog-search/etc/search_request.xml
了解更多信息