#elasticsearch
#elasticsearch
Вопрос:
В настоящее время я следую веб-руководству, и когда я запускаю:
GET /product/_doc/_search
{
"query": {
"range": {
"in_stock": {
"gte": 1,
"lte": 5
}
}
}
}
Я получаю кучу записей, включая:
{
"_index" : "product",
"_type" : "_doc",
"_id" : "366",
"_score" : 1.0,
"_source" : {
"name" : "Eggplant - Baby",
"price" : 58,
"in_stock" : 1,
"sold" : 187,
"tags" : [ ],
"description" : "Mauris sit amet eros. Suspendisse accumsan tortor quis turpis. Sed ante. Vivamus tortor. Duis mattis egestas metus. Aenean fermentum. Donec ut mauris eget massa tempor convallis. Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.",
"is_active" : false,
"created" : "2016/01/03"
}
},
Когда я запускаю:
GET /product/_doc/_search
{
"query": {
"range": {
"created": {
"gte": "2010/01/01"
}
}
}
}
по тому же набору данных я получаю:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
Почему я получаю ноль обращений по моему запросу? Я понимаю, что поиск сканирует записи с созданной датой, превышающей 2010/01/01, поэтому не должно ли оно соответствовать по крайней мере id
366?
Редактировать:
Вот мои сопоставления — похоже, это тип даты:
{
"product" : {
"aliases" : { },
"mappings" : {
"_doc" : {
"dynamic" : "false",
"properties" : {
"created " : {
"type" : "date",
"format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"
},
"description" : {
"type" : "text"
},
"discount" : {
"type" : "integer"
},
"in_stock" : {
"type" : "integer"
},
"is_active" : {
"type" : "boolean"
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"price" : {
"type" : "integer"
},
"sold" : {
"type" : "long"
},
"tags" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1551151769380",
"number_of_shards" : "5",
"number_of_replicas" : "1",
"uuid" : "3YTYcG-9TPeT_3jXfX5IMA",
"version" : {
"created" : "6060199"
},
"provided_name" : "product"
}
}
}
}
Комментарии:
1. ваш ‘created’ — это тип даты? проверьте свои сопоставления. Если да, то, пожалуйста, попробуйте указать формат рядом с gte.
2. Я отредактировал свой ответ — ‘created’, похоже, относится к типу date
Ответ №1:
У вас опечатка в имени ваших свойств. У вас есть дополнительный пробел после «созданного»:
"properties" : {
"created " : { <-- here
"type" : "date",
"format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"
},
Чтобы диагностировать это, вы должны вызвать
GET /product/_mapping
и убедитесь, что ваше поле created
действительно отображено как дата. В вашем случае это был текст.