【问题标题】:Elasticsearch updating the analyzer creates a members fieldElasticsearch 更新分析器创建成员字段
【发布时间】:2021-01-05 07:49:14
【问题描述】:

我遇到了一个问题,我需要更新索引上的停用词,该索引将英语分析器指定为默认分析器。通常,分析器在索引的设置中指定:

{
  "twitter": {
    "settings": {
      "index": {
        "creation_date": "1469465586110",
        "analysis": {
          "filter": {
            "lowercaseFilter": {
              "type": "lowercase"
            }
          },
          "analyzer": {
            "default": {
              "type": "english"
            },
...

因此,分析器位于<index name>.settings.index.analysis.analyzer

为了更新分析器,我运行了以下命令:

curl -XPOST "http://localhost:9200/twitter/_close" && \
curl -XPUT "http://localhost:9200/twitter/_settings" -d'
{
    "analysis": {
        "analyzer": {
            "default": {
                "type": "english",
                "stopwords": "_none_"
            }
        }
    }
}' && \
curl -XPOST "http://localhost:9200/twitter/_open"

运行这些命令后,我确认默认分析器正在分析文本并保留所有停用词。

但是,当我使用 Jest 客户端时,现在设置看起来像这样,并且分析没有正确进行(注意分析设置现在是如何在“members”属性下的):

{
  "twitter": {
    "settings": {
      "index": {
        "members": {
          "analysis": {
            "analyzer": {
              "default": {
                "type": "english",
                "stopwords": "_none_"
              },

我已经浏览了代码,一切看起来都井井有条:

【问题讨论】:

    标签: elasticsearch settings analyzer elasticsearch-jest


    【解决方案1】:

    我想通了。所以通过运行:

    sudo tcpflow -p -c -i lo0 port 9200 2>/dev/null | grep -oE '.*(GET|POST|PUT|DELETE) .*_dev.*' -A30
    

    我可以看到我发送的 JsonObject 包含 members 字段,这是 Gson 的 JsonObject 将对象存储在其内部的位置。由于我将这个原始对象传递给 Jest 的 UpdateSettings 构建器,因此它以一种我没想到的方式进行序列化(包括 members 字段),并以这种方式发送到 elasticsearch。我通过调用 JsonObject 的 toString() 方法并将其传递给 UpdateSettings Builder 解决了这个问题

    【讨论】:

      猜你喜欢
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2015-09-05
      • 1970-01-01
      • 2015-08-18
      相关资源
      最近更新 更多