Próbuję przeszukać moją bazę danych i używać terminów filtrowania wielkich/małych liter, ale zauważyłem, że gdy stosuje się analizatory query
, nie mogę wymyślić sposobu zastosowania analizatora pisanego małymi literami na przefiltrowanym wyszukiwaniu. Oto zapytanie:Elasticsearch Wyszukiwanie z małymi literami
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"term": {
"language": "mandarin" // Returns a doc
}
},
{
"term": {
"language": "Italian" // Does NOT return a doc, but will if lowercased
}
}
]
}
}
}
}
}
mam typ languages
że mam małe litery przy użyciu:
"analyzer": {
"lower_keyword": {
"type": "custom",
"tokenizer": "keyword",
"filter": "lowercase"
}
}
i odpowiedniego odwzorowania:
"mappings": {
"languages": {
"_id": {
"path": "languageID"
},
"properties": {
"languageID": {
"type": "integer"
},
"language": {
"type": "string",
"analyzer": "lower_keyword"
},
"native": {
"type": "string",
"analyzer": "keyword"
},
"meta": {
"type": "nested"
},
"language_suggest": {
"type": "completion"
}
}
}
}
Więc gdybym chciał tho perspektywie być małe litery chciałbym zmienić tokenizera do małymi jednym i reindex wszystko? – Maruf
Nie, już jest indeksowany z powodu filtra pisanego małymi literami. Problem polega na tym, że musisz użyć typu zapytania, który również zostanie przeanalizowany - filtry terminów nie. –
Czy zauważysz lepszą wydajność, jeśli po prostu wprowadzisz małe znaki wejściowe, aby można było nadal używać filtru Term za pomocą filtru zapytania? – odyth