gpt4 book ai didi

PHP ElasticSearch如何在索引记录之前设置映射?

转载 作者:行者123 更新时间:2023-12-02 22:39:52 25 4
gpt4 key购买 nike

我正在使用 laravel 和 elasticsearch-php要将数据索引和存储到弹性,我的问题是 Elasticsearch 使用动态映射,但我需要设置我的自定义映射。如何从我的映射中使用?

贝娄是我的代码:

$client = \Elasticsearch\ClientBuilder::create()->build();

$mappingData = array(
'index' => 'promote_kmp',
'body' => array(
'mappings' => $resource->getMappingProperties()
)
);
$client->indices()->create($mappingData);

$params = [
'type' => 'resources',
'id' => uniqid(),
'body' => [
'id' => $resource->id,
'name' => $resource->name,
'display_name_en' => $resource->display_name_en,
'display_name_pr' => $resource->display_name_pr,
'display_name_pa' => $resource->display_name_pa,
'table_name' => $resource->table_name,
'model_name' => $resource->model_name,
'in_sidemenu' => $resource->in_sidemenu,
'icon_class' => $resource->icon_class,
'created_at' => $resource->created_at,
'created_by' => $user,
]
];

//$response = $client->indices()->create($resource->getMappingProperties());

$client->index($params);
$resource->getMappingProperties()获取我在模型中设置的映射数组。
但是当我想索引一条记录时,它会显示 IndexAlreadyExistsException[[promote_kmp] already exists] .当我想搜索日期字段搜索无法正常工作并且我猜映射不正确时,就会出现这个问题。

最佳答案

正如我在评论中所说。

每次您要查询时,代码都会执行索引的创建。
但是索引只能创建一次。

所以它应该像数据库的迁移一样工作。

我能给你的唯一想法是创建一个生成索引的命令。
这样你就可以

$ artisan elasticsearch:generate <index>

关于代码,我为我们的案例所做的,使用一种注入(inject)类型的方法制作索引,以及一种将它们创建到 elasticsearch 中的方法:
interface Index {

/**
* @param Type[] $types Index types (resources)
*/
function setTypes(array $types);

/**
* Generate the index and the types into the elasticsearch
*/
function create();

}

然后类型应该生成映射和类型名称(如 /<index>/<type> ,如:
interface Type {

/**
* @return string The type name
*/
function getName();

/**
* @return array The type mapping
*/
function getMapping();

}

所以(在某个地方),你会创建这个类(这可能会更好):
$myIndex = new MyIndex();
$myIndex->setTypes([
new MyFirstType(),
new MySecondType(),
//...
]);
$myIndex->create();

我希望这有帮助。

关于PHP ElasticSearch如何在索引记录之前设置映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34837260/

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