gpt4 book ai didi

java - Elasticsearch Java API addMapping() 和 setSettings() 用法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:08 24 4
gpt4 key购买 nike

问题:如何使用

从 json 文件创建索引

json 文件包含索引 de_brochures 的定义。它还定义了一个分析器 de_analyzer,其中包含由相应索引使用的自定义过滤器。由于 json 与 curl 和 Sense 一起工作,我假设我必须调整它的语法以与 java API 一起工作。

我不想使用 XContentFactory.jsonBuilder(),因为 json 来自文件!

我有以下 json 文件来创建我的映射并设置设置:

将 Sense 与 PUT/indexname 结合使用,它确实从中创建了一个索引。

{
"mappings": {
"de_brochures": {
"properties": {
"text": {
"type": "string",
"store": true,
"index_analyzer": "de_analyzer"
},
"classification": {
"type": "string",
"index": "not_analyzed"
},
"language": {
"type": "string",
"index": "not_analyzed"
}
}
}
"settings": {
"analysis": {
"filter": {
"de_stopwords": {
"type": "stop",
"stopwords": "_german_"
},
"de_stemmer": {
"type": "stemmer",
"name": "light_german"
}
},
"analyzer": {
"de_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"de_stopwords",
"de_stemmer"
]
}
}
}
}
}

由于上面的方法不能单独使用 addMapping() 我试图将它分成两个单独的文件(我意识到我必须删除 "mappings":"settings": 部分):

------ Mapping json ------
{
"de_brochures": {
"properties": {
"text": {
"type": "string",
"store": true,
"index_analyzer": "de_analyzer"
},
"classification": {
"type": "string",
"index": "not_analyzed"
},
"language": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
------- Settings json --------
{
"analysis": {
"filter": {
"de_stopwords": {
"type": "stop",
"stopwords": "_german_"
},
"de_stemmer": {
"type": "stemmer",
"name": "light_german"
}
},
"analyzer": {
"de_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"de_stopwords",
"de_stemmer"
]
}
}
}
}

这是我加载和添加/设置 json 的 java 代码。

CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(index);
// CREATE SETTINGS
String settings_json = new String(Files.readAllBytes(brochures_mapping_path));
createIndexRequestBuilder.setSettings(settings_json);
// CREATE MAPPING
String mapping_json = new String(Files.readAllBytes(brochures_mapping_path));
createIndexRequestBuilder.addMapping("de_brochures", mapping_json);
CreateIndexResponse indexResponse = createIndexRequestBuilder.execute().actionGet();

不再有关于映射文件结构的提示,但它现在因错误而失败:

Caused by: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [de_analyzer] not found for field [text]

最佳答案

解决方案:我使用 createIndexRequestBuilder.setSource(settings_json);

设法用我的原始 json 文件做到了这一点

关于java - Elasticsearch Java API addMapping() 和 setSettings() 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com