ES 6.4 报错,提示 [nested] nested object under path [properties] is not of nested type

正式环境装的 ElasticSearch 版本是 6.4,搜索相似商品的时候会报 [nested] nested object under path [properties] is not of nested type 这个错误,在 Google 上搜索了下,有提到 nested 搜索要加上 path 的,我看代码里面都加上了

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
leo
最佳答案

@yuesir 这种情况通常是你没有创建索引的结构就直接往索引里写数据了,这个时候 Elasticsearch 就会自动猜测各个字段的类型并创建对应的结构,这就解释了为什么 price 字段会变成 text 类型。

5年前 评论
讨论数量: 6
leo

感觉是你创建索引的时候就有问题,没有把 properties 定义成一个 nested 类型的字段。

可以试试完成本章的最后一节,通过代码的方式来创建索引,再来看看搜索相似商品会不会报错。

5年前 评论

@leo
下图是直接在服务器上 curl http://localhost:9200/products/_mapping/_d... 得到的 properties mapping 的定义
file

自己执行的时候是通过 php artisan es:migrate 这个命令来完成的,自己检查了 ProjectIndex 里的 getProperties 方法,是有定义为 nested 的

file

另外有点疑惑:为什么定义索引的时候命名 price 被定义为 scaled_float 类型,但是在服务器通过 curl http://localhost:9200/products/_mapping/_d... 看到的 type 为 text
file

我看了自己学习机器上的索引,price 和 properties 的 type 类型是正常,那应该就是正式环境上索引有问题,我先自己看看是那个步骤导致了索引类型的不同

5年前 评论
leo

@yuesir 这种情况通常是你没有创建索引的结构就直接往索引里写数据了,这个时候 Elasticsearch 就会自动猜测各个字段的类型并创建对应的结构,这就解释了为什么 price 字段会变成 text 类型。

5年前 评论

楼主,你这个问题怎么解决的?多谢!

4年前 评论
晓鹤 (楼主) 4年前

多谢楼主,这么快就回复了!我执行php artisan es:migrate了。但是出现了下面的错误:

file

这是什么原因呢?多谢!

4年前 评论

调通了,多谢楼主!
首先要安装 分词器插件:https://github.com/medcl/elasticsearch-analysis-ik,找跟elasticsearch版本一样的zip包,下载解压后放到plugins下
在elasticsearch目录下的config下新建目录analysis,在其中创建文件synonyms.txt
然后再在项目文件夹下执行 php artisan es:migrate

课程中应该有写,但是我没有买课程,对elasticsearch也不熟。留给跟我一样的elasticsearch小白!

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!