Copy_to используется для копирования значений нескольких полей в одно, но при этом это поле не будет выводиться в _score
.
Представим ситуацию что у вас есть 3 поля, и вы часто ищите информацию по всем этим полям. И чтобы не писать каждый раз запросы на все поля вы можете объединить эти 3 поля в одно с помощью Copy_to.
Скопируем значения полей name
, surname
, city
в everything
. И попробуем поискать в everything
человека с именем Pavel
, проживающего допустим в Astana
. Когда вы индексируете документ, значения трех разных полей добавляются в инвертированный индекс поля everything
.
#создаём index
PUT my-index
{
"mappings": {
"properties": {
"name": {
"type": "text",
"copy_to": "everything"
},
"surname": {
"type": "text",
"copy_to": "everything"
},
"cty": {
"type": "text",
"copy_to": "everything"
},
"everything": {
"type": "text"
}
}
}
}
PUT my-index/_doc/2
{
"name": "Ivan",
"city": "Astana",
"surname": "Bubnov"
}
PUT my-index/_doc/3
{
"name": "Ivan",
"city": "Astana",
"surname": "Buba"
}
GET my-index/_search
{
"query": {
"match": {
"everything": "ivan astana"
}
}
}
В выводе получим:
"hits" : [
{
"_index" : "my-index",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.18232156,
"_source" : {
"name" : "Ivan",
"city" : "Astana",
"surname" : "Bubnov"
}
},
{
"_index" : "my-index",
"_type" : "_doc",
"_id" : "3",
"_score" : 0.18232156,
"_source" : {
"name" : "Ivan",
"city" : "Astana",
"surname" : "Buba"
}
}
]
Комментарии