除非include_type_name参数设置为true,否则不能在放置映射请求中提供类型。

时间:2019-04-25 21:35:47

标签: laravel elasticsearch

我正在使用https://github.com/babenkoivan/scout-elasticsearch-driver通过Laravel Scout实施Elasticsearch。伊万(Ivan)在Github上提到了这一点:

  

在Elasticsearch 6.0.0或更高版本中创建的索引只能包含一个映射类型。在5.x中创建的具有多种映射类型的索引将继续像在Elasticsearch 6.x中一样工作。映射类型将在Elasticsearch 7.0.0中完全删除。

如果我在这里了解:https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html我要么需要使用:

1)PUT索引?include_type_name = true

或者更好

2) PUT索引/ _doc / 1 {   “ foo”:“ baz” }

我被卡住了,因为我不知道如何使用1)或2)

如何添加参数include_type_name = true?

如何在不使用include_type_name参数的情况下创建正确的映射?

class TestIndexConfigurator extends IndexConfigurator
{
    use Migratable;
    /**
     * @var array
     */
    protected $settings = [
    ];
    protected $name = 'test';
}

2 个答案:

答案 0 :(得分:1)

当我在Kibana控制台中尝试GET product/default/_mapping时。

我一直收到此错误。

  

”除非获得映射请求,否则不能提供类型   include_type_name设置为true“

这在弹性搜索7.3.0中发生。 看起来最新版本的弹性搜索不再支持上述命令。

当我从上述命令中删除默认设置时,它对我有用。

GET product/_mapping

答案 1 :(得分:0)

Elasticsearch的早期版本(<= 5)每个索引支持多种类型。这意味着每种类型可能具有不同的数据映射。在Elasticsearch 6中,此功能已删除,您只能使用一种映射类型。

因此,对于Elasticsearch 7(最新版本),您可以添加索引,设置映射并添加文档,如下所示:

  • 创建索引

    PUT user
    
  • 添加映射

    PUT user/_mapping 
    {
      "properties": {
        "name": {
          "type": "keyword"
        },
        "loginCount": {
          "type": "long"
        }
      }
    }
    
  • 添加文档

    PUT user/_doc/1
    {
      "name": "John",
      "loginCount": 4
    }
    
    
  • 检查索引中的数据

    GET user/_search
    

现在,关于您使用的scout-elasticsearch-driver,在阅读了您提到的文档后,只是说您需要为每个可搜索模型创建单独的索引配置器,因为无法将多个模型存储在同一个索引中

要创建索引,请运行

php artisan make:index-configurator MyIndexConfigurator

然后

php artisan elastic:create-index App\\MyIndexConfigurator

这将为您在elasticsearch中创建索引。

要了解有关Elasticsearch的更多信息,建议您将Elasticsearch和kibana都安装到开发机器上,然后在kibana中使用它-界面非常漂亮,并支持自动完成功能,可以简化学习曲线。