Я пытаюсь настроить индекс elasticsearch, чтобы иметь политику анализа индексации по умолчанию с помощью анализатора keyword
, а затем переопределять его на некоторых полях, чтобы позволить им быть свободным анализируемым текстом. Так эффективно выбирайте бесплатный текстовый анализ, где я явно указываю в сопоставлении, какие поля анализируются для бесплатного текстового сопоставления. Мое отображение Defintion выглядит следующим образом:Переопределение анализа ключевых слов по умолчанию для elasticsearch
PUT test_index
{
"mappings":{
"test_type":{
"index_analyzer":"keyword",
"search_analyzer":"standard",
"properties":{
"standard":{
"type":"string",
"index_analyzer":"standard"
},
"keyword":{
"type":"string"
}
}
}
}
}
Так standard
должно быть проанализировано поле, и keyword
должны быть только точное совпадение. Однако, когда я вставляю некоторые выборочные данные с помощью следующей команды:
POST test_index/test_type
{
"standard":"a dog in a rug",
"keyword":"sheepdog"
}
Я не получаю никаких совпадений с помощью следующего запроса:
GET test_index/test_type/_search?q=dog
Однако я сделать получить матчи против:
GET test_index/test_type/_search?q=*dog*
Что заставляет меня думать, что поле standard
не анализируется. Кто-нибудь знает, что я делаю неправильно?
Я пытаюсь вернуть поведение, где мне не нужно указывать поля поиска. Поля могут быть добавлены в любое время, и не удастся добавить новые имена полей для каждого запроса, когда это произойдет. – Ceilingfish
@Ceilingfish См. Мой обновленный ответ. – bittusarkar
Блестящий! Благодаря! – Ceilingfish