Для этого вы можете использовать отображение dynamic_templates.По умолчанию Elasticsearch задает поля типа text
и index: true
, как показано ниже:
{
"products2": {
"mappings": {
"product": {
"properties": {
"color": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
Как видите, также создается поле ключевого слова как мультиполе.Поля этого ключевого слова индексируются, но не анализируются как текст.если вы хотите отбросить это поведение по умолчанию.Вы можете использовать указанную ниже конфигурацию для индекса при его создании:
PUT products
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"product": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword",
"index": false
}
}
}
]
}
}
}
После этого индекс будет выглядеть примерно так:
{
"products": {
"mappings": {
"product": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword",
"index": false
}
}
}
],
"properties": {
"color": {
"type": "keyword",
"index": false
},
"type": {
"type": "keyword",
"index": false
}
}
}
}
}
}
Примечание: я не знаю случая, ноВы можете использовать функцию нескольких полей, как упомянуто @Kamal.В противном случае вы не сможете осуществлять поиск по не проанализированным полям.Кроме того, вы можете использовать набор отображений dynamic_templates, некоторые поля анализируются.
Пожалуйста, проверьте документацию для получения дополнительной информации:
https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html
Кроме того, мне объяснили поведение в этой статье.Извините за это, но это турецкий.Вы можете проверить примеры кода с помощью Google Translate, если хотите.