我已经配置了 FOSElasticaBundle
如下:
fos_elastica:
clients:
default: { host: %elasticsearch_host%, port: %elasticsearch_port% }
serializer: ~
indexes:
app:
types:
tags:
serializer:
groups: [Default]
mappings:
name: ~
persistence:
driver: orm
model: AppBundle\Entity\Tag
provider: ~
listener: ~
finder: ~
为了测试,我的数据库中有三个标签:tag1
、tag2
、新标签
。
我的实体看起来像:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Class Tag
* @package AppBundle\Entity
*
* @ORM\Entity
* @ORM\Table(name="tags")
*/
class Tag
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @var string
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
protected $name;
我正在按如下方式搜索索引标签:
$finder = $this->container->get('fos_elastica.finder.app.tags');
$results = [];
if ($query !== null) {
$results = $finder->find("*" . $query . "*");
//$results should be serialized, but aren't
return new Response($results);
}
return new JsonResponse([
'results' => $results
]);
我的回复是:{"results":[{},{},{}]}
为什么 $results
没有序列化?当我调试 $results
时,里面有对象。
最佳答案
您不了解文档。您可以在以下文件中阅读: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/Resources/doc/serializer.md
FOSElasticaBundle 支持使用 Serializer 组件将您的对象序列化为 JSON,JSON 将直接发送到 Elasticsearch 服务器。结合自动映射,这意味着类型不必映射。
FOSElasticaBundle
不返回序列化数据。它使用 serialzier 将序列化数据发送到 elasticsearch 服务器。使用序列化程序时,您不必在配置中提供映射。
关于symfony - FOSElastica 为什么我的结果没有序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34590659/