Я пытаюсь создать поле в нижнем регистре и не анализироваться в Elasticsearch 5+, чтобы искать строки с пробелами в нижнем регистре (их индексировать в смешанном случае)
Перед Elasticsearch v5 мы могли бы использовать такой анализатор, как этот, для этого:Elasticsearch не проанализирован и в нижнем регистре
"settings":{
"index":{
"analysis":{
"analyzer":{
"analyzer_keyword":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}
}
}
}
Это, однако, не работает для меня прямо сейчас. И я считаю, что проблема заключается в том, что «строка» устарела и автоматически преобразуется в любое ключевое слово или текст.
Кто-нибудь здесь знает, как это сделать? Я думал о добавлении «полей» тег для моего отображения вдоль линий:
"fields": {
"lowercase": {
"type": "string"
**somehow convert to lowercase**
}
}
Это сделает работу с ней немного более сложным, и я понятия не имею, как превратить его в нижний регистр либо.
Ниже вы найдете тестовую установку, которая воспроизводит мою точную проблему.
создать индекс:
{
"settings":{
"index":{
"analysis":{
"analyzer":{
"analyzer_keyword":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}
}
}
},
"mappings":{
"test":{
"properties":{
"name":{
"analyzer":"analyzer_keyword",
"type":"string"
}
}
}
}
}
Добавить тестовую запись:
{
"name": "city test"
}
запрос, который должен соответствовать:
{
"size": 20,
"from": 0,
"query": {
"bool": {
"must": [{
"bool": {
"should": [{
"wildcard": {
"name": "*city t*"
}
}]
}
}]
}
}
}
Почему вы ищете поле 'name', а поле в вашем картографировании называется' title'? Также почему бы просто не объявить его тип как «type»: «text» вместо этого? И, наконец, как «Амстердам» должен соответствовать «городскому тесту»? – Val
Позвольте мне обновить примеры, я скопировал неправильные вещи :) Мои извинения. Если я объявляю это как текст, он не работает с пробелами. –
То, что я в основном хочу, это иметь строку типа «Городской тест» и сопоставлять ее с «городским тестом». вот и все. –