我在这里失去了理智,OpenSearch 的文档完全没有帮助,因为一切都是硬编码值。
无论如何,我有一个嵌套字段,它应该被展平为数组,但它不起作用,所以我显然错过了一些东西(忽略该字段的愚蠢命名;这样我们就不必做出巨大的改变到我们当前正在使用的插件) 使用此命令创建索引:
curl -XPUT -u "$OPENSEARCH_USER:$OPENSEARCH_PASSWORD" $OPENSEARCH_HOST_URL/mechanism-search -H "Content-Type: application/json" -d @/tmp/mechanism-search-index.json
机制搜索索引.json
{
"mappings": {
"properties": {
"mechanism": {
"properties": {
"mechanism_id" : {
"type" : "integer"
},
"mechanism_name": {
"type": "text"
}
}
},
"projects": {
"type" : "nested",
"include_in_parent": "true",
"properties": {
"project_id__type_list": {
"type": "integer"
},
"project_name__type_list": {
"type": "text"
}
}
}
}
}
项目应该是机制的嵌套字段,因此我希望通过GET Mechanism-search/_search
: 返回类似的内容
"mechanism_id" : "1111",
"mechanism_name" : "Test Mech",
"projects" : [
{
"project_id__type_list" : 1,
"project_name__type_list" : "testing1"
},
{
"project_id__type_list" : 2,
"project_name__type_list" : "testing2"
},
{
"project_id__type_list" : 3,
"project_name__type_list" : "testing3"
},
{
"project_id__type_list" : 4,
"project_name__type_list" : "testing4"
}
]
相反,我得到:
"mechanism_id" : "1111",
"mechanism_name" : "Test Mech",
"project_id__type_list" : 1,
"project_name__type_list" : "testing1"
映射中的字段名称与数据库视图中的字段名称完全匹配。当数据库中有多行时,为什么它只为机制抓取单个项目? Opensearch 的Documentation
全部使用 PUTS 并将值直接硬编码到文档;我该如何让它自动执行?我来自 SOLR,这些都没有任何意义,而且看起来过于复杂。 机制和项目通过交叉表连接,OpenSearch 使用的数据库视图通过连接指向它。 示例数据库查看数据: