OpenSearch 索引创建问题

问题描述 投票:0回答:1

我们正在从 ElasticSearch v7.6 和 OpenSearch v2.3 迁移我们的应用程序。因此,在此过程中,我们首先使用以下定义在 OpenSearch (2.3) 集群中创建索引模板 -

{
  "order": 0,
  "index_patterns": [
    "note-management-1.0-*"
  ],
  "settings": {
    "index": {
      "max_ngram_diff": "10",
      "analysis": {
        "filter": {
          "ngram_filter": {
            "type": "ngram",
            "min_gram": "1",
            "max_gram": "10"
          }
        },
        "normalizer": {
          "keyword_normalizer": {
            "filter": [
              "lowercase"
            ],
            "type": "custom"
          }
        },
        "analyzer": {
          "text_analyzer": {
            "filter": [
              "lowercase",
              "ngram_filter"
            ],
            "type": "custom",
            "tokenizer": "standard"
          }
        }
      },
      "number_of_shards": "5",
      "number_of_replicas": "2"
    }
  },
  "mappings": {
    "properties": {
      "owner": {
        "copy_to": "permissionToView",
        "type": "keyword"
      },
      "lastModifiedDate": {
        "type": "date"
      },
      "contentReadOnly": {
        "index": false,
        "type": "boolean"
      },
      "lastModifiedBy": {
        "index": false,
        "type": "keyword"
      },
      "readOnly": {
        "index": false,
        "type": "boolean"
      },
      "title": {
        "search_analyzer": "standard",
        "analyzer": "text_analyzer",
        "type": "text"
      },
      "permissionToView": {
        "type": "keyword"
      },
      "version": {
        "index": false,
        "type": "long"
      },
      "content": {
        "search_analyzer": "standard",
        "analyzer": "text_analyzer",
        "type": "text"
      },
      "tags": {
        "normalizer": "keyword_normalizer",
        "type": "keyword"
      },
      "noteType": {
        "normalizer": "keyword_normalizer",
        "type": "keyword"
      },
      "viewers": {
        "copy_to": "permissionToView",
        "index": false,
        "type": "keyword"
      },
      "createdDate": {
        "type": "date"
      },
      "externalObjects": {
        "dynamic": false,
        "type": "nested",
        "properties": {
          "displayName": {
            "normalizer": "keyword_normalizer",
            "type": "keyword"
          },
          "id": {
            "normalizer": "keyword_normalizer",
            "type": "keyword"
          },
          "type": {
            "normalizer": "keyword_normalizer",
            "type": "keyword"
          },
          "usersByPinned": {
            "type": "keyword"
          }
        }
      },
      "deleters": {
        "copy_to": "permissionToView",
        "index": false,
        "type": "keyword"
      },
      "id": {
        "index": false,
        "type": "keyword"
      },
      "outcome": {
        "index": false,
        "type": "keyword"
      },
      "editors": {
        "copy_to": "permissionToView",
        "index": false,
        "type": "keyword"
      }
    }
  },
  "aliases": {
    "note-management-1.0": {},
    "note-management": {}
  }
}

索引

note-management
尚未在 OpenSearch 中创建,预期一旦应用程序根据上面创建的模式创建第一个文档,就会隐式创建索引。

应用程序能够创建索引和文档,但我们无法使用现有应用程序检索它们,因为根据 OpenSearch,查询格式错误。

然后,我们删除了隐式创建的索引,并使用之前在 ElasticSearch v7.6 中创建的索引手动创建了它。之后,应用程序能够索引/查询文档,没有任何问题。

对于应用程序使用的查询以及使用 spring-boot-starter-data-elasticsearch 库生成的索引,问题似乎是当应用程序创建索引时,它不遵循使用的格式和约定OpenSearch模式,这会导致创建的索引格式不正确,以后无法查询。

如果有专家能给我们一些关于为什么会发生这种情况以及如何解决这个问题的指示,我们将不胜感激。

举个例子,当我们使用 spring-boot-starter-data-elasticsearch 2.4.11 创建索引时,隐式索引的定义为 -

{
  "note-management" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "_class" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "content" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "contentReadOnly" : {
          "type" : "boolean"
        },
        "createdDate" : {
          "type" : "long"
        },
        "editors" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "lastModifiedBy" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "lastModifiedDate" : {
          "type" : "long"
        },
        "noteType" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "owner" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "readOnly" : {
          "type" : "boolean"
        },
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "version" : {
          "type" : "long"
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1676061494880",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "udj4QFKzSLSRyo8laD7vJA",
        "version" : {
          "created" : "135238227"
        },
        "provided_name" : "note-management"
      }
    }
  }
}

这是错误的。

所以我们必须删除这个索引并使用正确的定义手动创建它,如下 -

{
  "note-management" : {
    "aliases" : {  },
    "mappings" : {
      "properties" : {
        "content" : {
          "type" : "text",
          "analyzer" : "text_analyzer",
          "search_analyzer" : "standard"
        },
        "contentReadOnly" : {
          "type" : "boolean",
          "index" : false
        },
        "createdDate" : {
          "type" : "date"
        },
        "deleters" : {
          "type" : "keyword",
          "index" : false,
          "copy_to" : [
            "permissionToView"
          ]
        },
        "editors" : {
          "type" : "keyword",
          "index" : false,
          "copy_to" : [
            "permissionToView"
          ]
        },
        "externalObjects" : {
          "type" : "nested",
          "dynamic" : "false",
          "properties" : {
            "displayName" : {
              "type" : "keyword",
              "normalizer" : "keyword_normalizer"
            },
            "id" : {
              "type" : "keyword",
              "normalizer" : "keyword_normalizer"
            },
            "type" : {
              "type" : "keyword",
              "normalizer" : "keyword_normalizer"
            },
            "usersByPinned" : {
              "type" : "keyword"
            }
          }
        },
        "id" : {
          "type" : "keyword",
          "index" : false
        },
        "lastModifiedBy" : {
          "type" : "keyword",
          "index" : false
        },
        "lastModifiedDate" : {
          "type" : "date"
        },
        "noteType" : {
          "type" : "keyword",
          "normalizer" : "keyword_normalizer"
        },
        "outcome" : {
          "type" : "keyword",
          "index" : false
        },
        "owner" : {
          "type" : "keyword",
          "copy_to" : [
            "permissionToView"
          ]
        },
        "permissionToView" : {
          "type" : "keyword"
        },
        "readOnly" : {
          "type" : "boolean",
          "index" : false
        },
        "tags" : {
          "type" : "keyword",
          "normalizer" : "keyword_normalizer"
        },
        "title" : {
          "type" : "text",
          "analyzer" : "text_analyzer",
          "search_analyzer" : "standard"
        },
        "version" : {
          "type" : "long",
          "index" : false
        },
        "viewers" : {
          "type" : "keyword",
          "index" : false,
          "copy_to" : [
            "permissionToView"
          ]
        }
      }
    },
    "settings" : {
      "index" : {
        "number_of_shards" : "1",
        "provided_name" : "note-management-1.0.0",
        "creation_date" : "1676062153821",
        "analysis" : {
          "filter" : {
            "ngram_filter" : {
              "type" : "ngram",
              "max_ngram_diff" : "10",
              "min_ngram_diff" : "1"
            }
          },
          "normalizer" : {
            "keyword_normalizer" : {
              "filter" : [
                "lowercase"
              ],
              "type" : "custom"
            }
          },
          "analyzer" : {
            "text_analyzer" : {
              "filter" : [
                "lowercase",
                "ngram_filter"
              ],
              "type" : "custom",
              "tokenizer" : "standard"
            }
          }
        },
        "number_of_replicas" : "1",
        "uuid" : "RGYrVMtvSFWrSF1GwxuWKw",
        "version" : {
          "created" : "135238227"
        }
      }
    }
  }
}
elasticsearch spring-data-elasticsearch opensearch amazon-opensearch spring-data-opensearch
1个回答
0
投票

Spring Data Elasticsearch 不是针对 OpenSearch 库或服务器构建或测试的。

您可能想查看 spring-data-opensearch 项目,该项目基于 Spring Data Elasticsearch,但使用 OpenSearch 库与服务器进行通信。

© www.soinside.com 2019 - 2024. All rights reserved.