Когда вы создаете образец, сделайте c и позвольте ES автоматически сгенерировать сопоставление для вас,
POST comments/_doc
{
"comment": "?"
}
выполнение
GET comments/_mapping
даст вам
"comment":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
Теперь анализатор *1011* типа по умолчанию обычно standard
.
Когда мы пытаемся увидеть, как наши нестандартные символы получили проанализированный
GET comments/_analyze
{
"text": "?",
"analyzer": "standard"
}
результат -
{
"tokens" : [ ]
}
, означающий, что мы не можем искать его содержимое, используя стандартное поле text
, но нам нужно
-
либо определите другой анализатор по умолчанию
, либо определите этот анализатор в одном из комментариев fields
Начиная со второго подхода (поскольку рекомендуется хранить отдельно анализируемые поля по-разному),
PUT comments2
{
"mappings": {
"properties": {
"comment": {
"type": "text",
"fields": {
"whitespace_analyzed": {
"type": "text",
"analyzer": "whitespace"
}
}
}
}
}
}
POST comments2/_doc
{
"comment": "?"
}
После проверки
GET comments2/_analyze
{
"text": "?",
"analyzer": "whitespace"
}
мы можем сделать следующее в KQL
comment.whitespace_analyzed:"?"
Обратите внимание, что есть набор встроенных анализаторов на выбор, но вы можете создать свой собственный.