elasticsearch - 如何启用嵌套映射?
问题描述
使用 ES 6 并且无法正确设置我的映射。我有这个文档:
{
"_index": "entries_1",
"_type": "elasticsearch-record",
"_id": "3684",
"_score": 5.355921,
"_source": {
"title": "My Title",
"result": {
"autor": [
"fernando-fernandes"
]
}
}
}
还有我的映射:
{
"craft-entries_1": {
"mappings": {
"elasticsearch-record": {
"properties": {
"result": {
"type": "nested",
"enabled": false
}
}
}
}
}
}
我不能results.autor
用这个查询:
{
"query": {
"bool" : {
"must" : [
{ "term": { "result.autor": "fernando-fernandes" } }
]
}
}
}
我试过 PUT 这个,但似乎对映射根本没有影响,即使我再次查询我的映射仍然显示为enabled:false
,也许我应该映射为对象?
{
"properties": {
"result.autor": {
"type": "nested",
"enabled": true
}
}
}
我错过了什么?
解决方案
您的源文档没有根据您的映射正确设计,应该是这样的:
{
"title": "My Title",
"result": [
{
"autor": "fernando-fernandes"
}
]
}
由于result
是嵌套的,因此应该将其建模为内部包含元素的数组。
因此,删除您的索引,使用以下映射重新创建它(您需要删除enabled: false
,因为这仅适用于object
类型)
PUT craft-entries_1
{
"mappings": {
"elasticsearch-record": {
"properties": {
"result": {
"type": "nested"
}
}
}
}
}
最后,如上所示为您的文档编制索引,然后您的查询将起作用。
推荐阅读
- node.js - 节点和 node-postgres 的 Heroku/Postgres“ClientAuthentication”错误
- javascript - npm run prod 会产生错误,即使 npm run dev 可以正常工作
- symfony - 发送 IRI 数组时,Symfony ApiPlatform GraphQl 突变失败
- python - 用于锐化图像的 Python 项目
- pycharm - PyCharm 无法更改 `*.pyx` 通配符以关联到不同的文件类型
- c++ - 从引用创建 std::shared_ptr
- java - 将@OneToMany 与@RestController 关系使用而不进行无限缩减的最佳实践是什么
- amazon-s3 - EMR 6.2.0 的 s3-dist-cp 在哪里?
- linux - 如何不允许其他用户在远程服务器中复制我的脚本
- sql - 存储每小时数据的高效方式