Tenho uma coleção mongo que armazena dados de cidade/país em vários idiomas. Por exemplo, a seguinte consulta:
db.cities_database.find({ "name.pl.country": "Węgry" }).pretty().limit(10);
Retorna dados no seguinte formato:
[
{
_id: ObjectId('67331d2a9566994a18c505aa'),
geoname_id_city: 714073,
latitude: 46.91667,
longitude: 21.26667,
geohash: 'u2r4guvvmm4m',
country_code: 'HU',
population: 7494,
estimated_radius: 400,
feature_code: 'PPL',
name: {
pl: { city: 'Veszto', admin1: null, country: 'Węgry' },
ascii: { city: 'veszto', admin1: null, country: null },
lt: { city: 'Veszto', admin1: null, country: 'Vengrija' },
ru: { city: 'Veszto', admin1: null, country: 'Венгрия' },
hu: { city: 'Veszto', admin1: null, country: 'Magyarország' },
en: { city: 'Veszto', admin1: null, country: 'Hungary' },
fr: { city: 'Veszto', admin1: null, country: 'Hongrie' }
}
}
...
]
Quero poder usar a mesma consulta usando apenas caracteres em inglês, então, neste exemplo, gostaria de consultar por "name.pl.country": "Wegry"
(em vez de caractere, ę
gostaria que o Mongo o tratasse e
ao executar esta consulta).
É possível conseguir isso?
Até agora tentei usar a ordenação assim:
db.cities_database.find({ "name.pl.country": "Wegry" }).collation({ locale: "pl", strength: 1 }).pretty().limit(10);
mas essa consulta não retorna nada.
Não tenho conhecimento em polonês e não sei a diferença entre
e
eę
. Mas se você usa o MongoDB Altas, pode configurar um customAnalyzer comicuFolding
para executar uma pesquisa sem diacríticos.O índice:
$search
consulta:Parque de pesquisa do MongoDB Atlas
Acredito que é assim que a classificação polonesa é definida, veja o gráfico CLDR polonês .
ê Ę são pretos, acho que isso significa "deve corresponder exatamente". Outros caracteres (por exemplo, é É è È ê Ê ë Ë) são cinzas, para eles funciona:
Quando você os consulta, ele fornece
Talvez você esteja procurando por