Ответ 1
Я бы предположил, что ваше поле проанализировано, которое является установкой по умолчанию для строковых полей в elasticsearch. В результате, когда он индексировал его, он не индексировался как один термин "время обновления", а вместо этого в качестве двух терминов: "обновление" и "время". Вот почему ваш термин поиск не может найти этот термин. Если ваше поле всегда будет содержать значения, которые должны быть сопоставлены полностью как есть, было бы лучше определить такое поле при сопоставлении, которое не анализируется. Вы можете сделать это, воссоздав индекс с новым отображением:
curl -XPUT http://localhost:9200/your-index -d '{
"mappings" : {
"your-type" : {
"properties" : {
"field" : { "type": "string", "index" : "not_analyzed" }
}
}
}
}'
curl -XPUT http://localhost:9200/your-index/your-type/1 -d '{
"field" : "update-time"
}'
curl -XPOST http://localhost:9200/your-index/your-type/_search -d'{
"filter": {
"term": {
"field": "update-time"
}
}
}'
В качестве альтернативы, если вам нужна гибкость в поиске записей на основе этого поля, вы можете сохранить это поле и использовать вместо него текстовые запросы:
curl -XPOST http://localhost:9200/your-index/your-type/_search -d'{
"query": {
"text": {
"field": "update-time"
}
}
}'
Пожалуйста, имейте в виду, что если ваше поле будет проанализировано, эта запись будет найдена путем поиска только слова "обновление" или слова "время".