MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB diacriticInSensitive search nie pokazuje wszystkich akcentowanych (słów ze znakiem diakrytycznym) wierszy zgodnie z oczekiwaniami i na odwrót

Od mongodb 3.2 , indeksy tekstowe są niewrażliwe na znaki diakrytyczne:

W wersji 3 indeks tekstowy jest niewrażliwy na znaki diakrytyczne. Oznacza to, że indeks nie rozróżnia znaków zawierających znaki diakrytyczne od ich nieoznaczonych odpowiedników, takich jak é, ê i e. Mówiąc dokładniej, indeks tekstowy usuwa znaki sklasyfikowane jako znaki diakrytyczne w Liście właściwości bazy danych znaków Unicode 8.0.

Powinno więc zadziałać następujące zapytanie:

db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );

ale wygląda na to, że jest błąd związany z dierezą ( ¨ ), nawet jeśli na liście Unicode 8.0 jest on oznaczony jako znak diakrytyczny (problem w JIRA:SERVER-29918 )

Rozwiązanie

od mongodb 3.4 możesz użyć sortowania, które pozwala na wykonanie tego rodzaju zapytania:

na przykład, aby uzyskać oczekiwany wynik, uruchom następujące zapytanie:

db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})

to wygeneruje:

{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }

w zestawieniu strength to poziom porównania do wykonania

  • 1 :tylko znak podstawowy
  • 2 :wrażliwy na znaki diakrytyczne
  • 3 :rozróżniana wielkość liter + rozróżnianie znaków diakrytycznych



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Fast or Bulk Upsert w pymongo

  2. 2 sposoby na uzyskanie rozmiaru dokumentu w MongoDB

  3. Ustaw limit czasu Mongo w wiosennym rozruchu

  4. Błąd połączenia Mongodb w kontenerze Docker

  5. Przygotowanie serwera MongoDB do produkcji