#node.js #elasticsearch
#node.js #elasticsearch
Вопрос:
У меня есть схема, опубликованная в эластичном файле, и я хочу знать, возможно ли добавить нормализатор нижнего регистра при публикации индекса, чтобы обновить это поле и избежать определения нового объекта схемы со всеми старыми полями и новым.
В настоящее время я пытаюсь обновить это поле с помощью этой команды:
await this.getClient().indices.putSettings({index: indexName, body:{
softwarePublisher: {
type: "text",
fields: {
ngram: {
type: "text",
analyzer: "software_analyzer",
search_analyzer: "software_search_analyzer",
},
raw: {
type: "keyword",
},
rawl: {
type: "keyword",
normalizer: "lowercase_normalizer",
},
},
},
}});
Но я получил следующую ошибку:
{«ошибка»: {«root_cause»:[{«type»:»illegal_argument_exception»,»причина»: «неизвестная настройка [index.softwarePublisher.fields.ngram.analyzer] пожалуйста, проверьте, установлены ли какие-либо необходимые плагины, или проверьте документацию по последним изменениям для удаленных настроек»}],»type»:»illegal_argument_exception»,»reason»: «неизвестная настройка [index.softwarePublisher.fields.ngram.analyzer] пожалуйста, проверьте, установлены ли какие-либо необходимые плагины, или проверьте документацию по последним изменениям для удаленных настроек», «suppressed»:[{«type»:»illegal_argument_exception»,»причина»:»неизвестная настройка [index.softwarePublisher.fields.ngram.search_analyzer] пожалуйста, проверьте, установлены ли какие-либо необходимые плагины, или проверьте документацию по последним изменениям для удаленных настроек»},{«тип»:»illegal_argument_exception»,»причина»: «неизвестная настройка [index.softwarePublisher.fields.ngram.type] пожалуйста, проверьте, установлены ли какие-либо необходимые плагины, или проверьте документацию по последним изменениям для удаленных настроек»},{«type»:»illegal_argument_exception»,»reason»:»неизвестная настройка [index.softwarePublisher.fields.raw.type] пожалуйста, проверьте, установлены ли какие-либо необходимые плагины, или проверьте документацию по последним изменениям для удаленных настроек»},{«type»:»illegal_argument_exception»,»reason»:»неизвестная настройка [index.softwarePublisher.fields.rawl.normalizer] пожалуйста, проверьте, установлены ли какие-либо необходимые плагины, илипроверьте документацию по критическим изменениям для удаленных настроек «},{«type»:»illegal_argument_exception»,»reason»:»неизвестная настройка [index.softwarePublisher.fields.rawl.type] пожалуйста, убедитесь, что установлены все необходимые плагины, или проверьте документацию по критическим изменениям для удаленных настроек»},{«type»:»illegal_argument_exception»,»reason»: «неизвестная настройка [index.softwarePublisher.type] пожалуйста, проверьте, установлены ли все необходимые плагины, или проверьте документацию по последним изменениям для удаленных настроек»}]},»статус»: 400}
I tried to with putMappings but anyway I got an error.
EDIT
Elastic version
curl -XGET 'http://localhost:9200'
{
"name" : "bf9cd8c528fc",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "MzMfZzJaQwia1A5U5SFzNg",
"version" : {
"number" : "7.1.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "7a013de",
"build_date" : "2019-05-23T14:04:00.380842Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
РЕДАКТИРОВАТЬ 2
Ошибка при использовании putMapping
{«ошибка»:{«root_cause»:[{«type»:»mapper_parsing_exception»,»причина»: «Определение корневого сопоставления имеет неподдерживаемые параметры: [publisher : {type=text, fields={rawl={normalizer=lowercase_normalizer, type=ключевое слово}, raw={type=ключевое слово}, ngram={search_analyzer=software_search_analyzer, анализатор=software_analyzer, тип=текст}}}]»}],»тип»:»mapper_parsing_exception»,»причина»: «Определение корневого сопоставления имеет неподдерживаемые параметры: [издатель: {тип=текст, поля ={rawl={нормализатор= нормализатор нижнего регистра, тип = ключевое слово}, raw={тип= ключевое слово}, ngram={search_analyzer=software_search_analyzer, анализатор =software_analyzer, тип =текст}}}]»},»статус»: 400}
Анализатор
export const softwareNameAnalyzer = {
filter: {
ngram_custom: {
type: "edge_ngram",
min_gram: "1",
max_gram: "15",
},
},
tokenizer: {
software_tokenizer,
},
normalizer: {
lowercase_normalizer: {
filter: ["lowercase"],
},
},
analyzer: {
software_search_analyzer: defaultAnalyzer,
software_analyzer: softwareAnalyzer,
default: defaultAnalyzer,
default_search: defaultAnalyzer,
},
};
export const softwareAnalyzer = {
type: "custom",
tokenizer: "software_tokenizer",
char_filter: ["html_strip"],
filter: ["lowercase", "ngram_custom"],
};
Есть идеи?
Спасибо?
Комментарии:
1. Какую версию ES вы используете?
2. только что обновлена информация о версии
3. Вы должны использовать
putMappings()
notputSettings()
, поскольку вы определяете поля. С какой ошибкой выputMappings()
сталкиваетесь?4. Также как вы определяете свои пользовательские анализаторы?
5. Просто обновите информацию thx
Ответ №1:
Во-первых, вы должны использовать putMappings()
not putSettings()
, поскольку вы определяете поля.
Затем вы должны вызвать putMappings()
следующим образом (вы пропускаете properties
раздел):
await this.getClient().indices.putMappings({index: indexName, body:{
properties: { <<----- add this
softwarePublisher: {
...
}
}
}});
Примечание: вам нужно убедиться, что вы вызываете putSettings()
before putMappings
, чтобы сначала были установлены ваши пользовательские анализаторы, иначе putMappings()
вызов будет жаловаться, что ваши пользовательские анализаторы не существуют.
Комментарии:
1. Как я вызывал putSettings раньше? с пустым значением, таким как putSettings(); putMappings({index: IndexName, body:{…?
2. Нет, вам нужно предоставить свои пользовательские анализаторы
3. хорошо, спасибо за ответ.
4. Круто, рад, что это помогло!