gpt4 book ai didi

php - Yii2 Elasticsearch扩展-如何处理类型映射?

转载 作者:行者123 更新时间:2023-12-03 01:03:54 25 4
gpt4 key购买 nike

我希望能够在我的ES索引中存储一个json对象。这是我要存储的示例(这是一个序列化模型,一个发送到ES的请求正文):

"{"id":218,"name":"Test2","category_id":1,"address":"Pushkin street","phone":null,"site":null,"location":{"lat":64,"lon":70},"city":"Heaven","description":"Super company","tags":["#test1","#test2"]}"

当我尝试存储它时(当然是通过扩展名),这是ES返回的错误:
"{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse [location]"}],"type":"mapper_parsing_exception","reason":"failed to parse [location]","caused_by":{"type":"illegal_argument_exception","reason":"unknown property [lat]"}},"status":400}"

好像没有文档中没有特定类型的映射,我无法做到这一点:
https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-object-type.html

但是,我似乎没有找到在模型中提供该映射的方法。扩展的文档并没有真正说明任何内容。
因此,我的问题是:我是否完全需要它,如果需要,怎么办?

感谢所有反馈。

最佳答案

我假设您的模型是\yii\elasticsearch\ActiveRecord。您需要描述其属性:

public function attributes()
{
return [
'name',
'category_id',
'address',
'phone',
'site',
'location',
'city',
'description',
'tags'
];
}

不要忘记配置 index()type()。在以下示例中, typemy_address

然后,您需要将 create an indexproper field mapping一起使用。映射应如下所示:
"mappings" : {
"my_address" : {
"properties" : {
"name" : { "type" : "string"},
"category_id" : { "type" : "integer"},
"address" : { "type" : "string"},
"phone" : { "type" : "string"},
"site" : { "type" : "string"},
"location" : { "type" : "geo_point"},
"city" : { "type" : "string"},
"description" : { "type" : "string"},
"tags" : { "type" : "string"}
}
}
}

注意三件事:
  • 位置类型为geo_point
  • 标签被声明为string。这也将使它们成为字符串数组。
  • 我没有包括id字段。如果它是唯一的,建议您将yii模型的ID设置为必要的值($model->primaryKey = '123')。否则,您的ES模型将其内部ID设置为AVDXmfJ3Ou7LzqD1DDMj之类的内容,并且还具有一个ID字段,该字段不是很方便。

  • 我鼓励您仔细查看这些映射-在配置如何精确分析字符串时它们非常重要。

    更新:您实际上并没有在模型的任何地方描述映射。在迁移中进行操作-类似于在SQL中创建表。

    关于php - Yii2 Elasticsearch扩展-如何处理类型映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33412897/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com