Dimous
(Dimous)
September 27, 2015, 3:34am
1
Здравствуйте!
Возможно, это баг и я должен был создать тикет. На случай, если изменилось поведение has_parent:
Я собираю ES каждый день и проверяю одни и те же запросы на одних и тех же данных. Сборка за 26 сентября перестала возвращать результаты.
Иерархия данных такая: классификатор > каталог > товар.
Маппинг:
"good": {
"_parent": {
"type": "catalogue",
"fielddata": {
"loading": "eager_global_ordinals"
}
},
...
"catalogue": {
"_parent": {
"type": "classifier",
"fielddata": {
"loading": "eager_global_ordinals"
}
},
...
"classifier": {
"_all": {
"enabled": false
},
"_routing": {
"required": true
},
"_timestamp": {
"enabled": true
},
"dynamic": "strict",
"properties": {
"title@classifier": {
"store": "yes",
"type": "string",
"term_vector": "with_positions_offsets"
},
"description@classifier": {
"store": "yes",
"type": "string",
"term_vector": "with_positions_offsets"
}
}
}
Запрос:
GET /good/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"group@good": "d836724e-09bd-11e1-b3c8-0024e8660f34"
}
},
{
"has_parent": {
"parent_type": "catalogue",
"query": {
"has_parent": {
"parent_type": "classifier",
"query": {
"ids": {
"values": [
"2fbee9ce-a8a4-11de-a2f3-000c298dc26a"
]
}
}
}
}
}
}
]
}
}
}
Если убрать has_parent, результат возвращается.
Переиндексировал, результат тот же.
Igor_Motov
(Igor Motov)
September 28, 2015, 2:26pm
2
Пробовал воспроизвести. Не получается. Вот скрипт, который я пробовал:
curl -XDELETE "localhost:9200/test-idx?pretty"
echo
curl -XPUT "localhost:9200/test-idx?pretty" -d '{
"mappings": {
"good": {
"_parent": {
"type": "catalogue"
},
"properties": {
"group@good" :{
"type": "string",
"index": "not_analyzed"
}
}
},
"catalogue": {
"_parent": {
"type": "classifier"
}
},
"classifier": {
"_all": {
"enabled": false
},
"_routing": {
"required": true
},
"_timestamp": {
"enabled": true
},
"dynamic": "strict",
"properties": {
"title@classifier": {
"store": "yes",
"type": "string",
"term_vector": "with_positions_offsets"
},
"description@classifier": {
"store": "yes",
"type": "string",
"term_vector": "with_positions_offsets"
}
}
}
}
}'
curl -XPUT "localhost:9200/test-idx/good/1?parent=2&routing=abc&pretty" -d '{
"group@good": "d836724e-09bd-11e1-b3c8-0024e8660f34"
}'
curl -XPUT "localhost:9200/test-idx/catalogue/2?parent=2fbee9ce-a8a4-11de-a2f3-000c298dc26a&routing=abc&pretty" -d '{
}'
curl -XPUT "localhost:9200/test-idx/classifier/2fbee9ce-a8a4-11de-a2f3-000c298dc26a?routing=abc&pretty" -d '{
}'
curl -XPOST "localhost:9200/test-idx/_refresh?pretty"
curl -XGET "localhost:9200/test-idx/_search?pretty" -d '{
"query": {
"bool": {
"must": [
{
"term": {
"group@good": "d836724e-09bd-11e1-b3c8-0024e8660f34"
}
},
{
"has_parent": {
"parent_type": "catalogue",
"query": {
"has_parent": {
"parent_type": "classifier",
"query": {
"ids": {
"values": [
"2fbee9ce-a8a4-11de-a2f3-000c298dc26a"
]
}
}
}
}
}
}
]
}
}
}'
Dimous
(Dimous)
September 29, 2015, 4:02am
3
Выполнил ваши скрипты и получил результат. Потом выполнил этот запрос на реальных данных и тоже получил результат Начал искать отличия. Я указывал тип документов результата в url . Такой запрос ничего не вернёт:
GET /test-idx/good/_search?pretty
{
"query": {
"bool": {
"must": [
{
"term": {
"group@good": "d836724e-09bd-11e1-b3c8-0024e8660f34"
}
},
{
"has_parent": {
"parent_type": "catalogue",
"query": {
"has_parent": {
"parent_type": "classifier",
"query": {
"ids": {
"values": [
"2fbee9ce-a8a4-11de-a2f3-000c298dc26a"
]
}
}
}
}
}
}
]
}
}
}
В боевой 2.0.0-beta2 всё продолжает работать и на пятничной сборке 3.0.0 тоже . То есть поведение всё-таки изменилось? Теперь не нужно указывать тип результата? Или это баг?
Dimous
(Dimous)
September 29, 2015, 8:44am
4
Всё понятно!
Правила стали жёстче. Теперь нужно указывать все типы, перечисленные в запросе - /test-idx/good,catalogue,classifier/_search
Igor_Motov
(Igor Motov)
September 29, 2015, 10:03am
5
Нет, похоже, что это все-таки баг.
Igor_Motov
(Igor Motov)
September 30, 2015, 10:25am
6