微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Elasticsearch - 通过 java API 执行但不是手动创建索引失败

如何解决Elasticsearch - 通过 java API 执行但不是手动创建索引失败

我有一个带有 ngram 分析器的复杂索引。我希望能够通过 Java API 创建新索引。我目前为此使用 Kotlin,但使用相同的框架。我已经为此索引创建了架构:

 {
  "settings": {
    "index": {
      "max_ngram_diff": 20,"search.idle.after": "10m"
    },"analysis": {
      "analyzer": {
        "ngram3_analyzer": {
          "tokenizer": "ngram3_tokenizer","filter": [
            "lowercase"
          ]
        }
      },"tokenizer": {
        "ngram3_tokenizer": {
          "type": "ngram","min_gram": 3,"max_gram": 20
        }
      }
    }
  },"mappings": {
    "dynamic": "strict","_doc": {
      "properties": {
        "name": {
          "type": "keyword","fields": {
            "partial": {
              "type": "text","analyzer": "ngram3_analyzer","search_analyzer": "keyword"
            },"text": {
              "type": "text"
            }
          }
        },"location": {
          "type": "geo_shape","ignore_malformed": true
        },"type": {
          "type": "keyword"
        },"sort": {
          "type": "integer"
        }
      }
    }
  }
}

这个 json 模式在通过 rest 客户端 PUT 调用手动传递它时起作用。

    {
    "ackNowledged": true,"shards_ackNowledged": true,"index": "new_index_created"
    }

使用以下 koltin 函数通过弹性 java API 传递相同的模式:

private fun createIndex(index: String,schema: String) {
    val createIndexRequest = CreateIndexRequest(index).mapping(schema,XContentType.JSON)
    getClient().indices().create(createIndexRequest,RequestOptions.DEFAULT)
}

我收到了这个回复

Elasticsearch exception [type=mapper_parsing_exception,reason=Failed to parse mapping [_doc]: Root mapping deFinition has unsupported parameters:  [settings : {index={max_ngram_diff=20,search.idle.after=10m},analysis={analyzer={ngram3_analyzer={filter=[lowercase],tokenizer=ngram3_tokenizer}},tokenizer={ngram3_tokenizer={min_gram=3,type=ngram,max_gram=20}}}}] [mappings : {_doc={properties={name={type=keyword,fields={text={type=text},partial={search_analyzer=keyword,analyzer=ngram3_analyzer,type=text}}},location={ignore_malformed=true,type=geo_shape},sort={type=integer},type={type=keyword}}},dynamic=strict}]]

对此问题的任何帮助都会很棒:)

解决方法

您得到的错误是因为您将 mappingssettings 都传递到 mapping(...) 调用中。

您可以仅使用 mapping() 部分调用 mappings,使用 setting() 部分调用 settings,或者您可以像这样调用 source():>

val createIndexRequest = CreateIndexRequest(index).source(schema,XContentType.JSON)
                                                      ^
                                                      |
                                                  change this

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?