Есть ли способ избежать акцентов в полнотекстовом поиске mongodb? - PullRequest
0 голосов
/ 26 марта 2020

С новой функцией поиска Atlas есть способ избежать акцентов.

Я сделал этот индекс:

{
 "analyzer": "lucene.standard",
 "searchAnalyzer": "lucene.standard",
 "mappings": {
   "dynamic": false,
   "fields": {
     "_id": {
       "type": "string",
       "analyzer": "lucene.keyword"
     },
     "firstName": {
       "type": "string",
       "analyzer": "lucene.french"
     },
     "lastName": {
       "type": "string",
       "analyzer": "lucene.french"
     },
     "email": {
       "type": "string",
       "analyzer": "lucene.standard"
     }
   }
 }
}

С этими данными:

db.testJTAFulltextSearch.insert({_id: "testFTS3", firstName: "René", lastName: "Martin", email: "rmartin@gmail.com"})
db.testJTAFulltextSearch.insert({_id: "testFTS4", firstName: "Rene", lastName: "Martin", email: "rmartin@gmail.com"})

И с этим поиском:

db.testJTAFulltextSearch.aggregate([{$searchBeta: {index: "customer", text: {query: "René", path: ["_id", "firstName", "email"]}}}])

Я получил:

{ "_id" : "testFTS3", "firstName" : "René", "lastName" : "Martin", "email" : "rmartin@gmail.com" }

Акценты не экранированы (é должен обрабатываться как ae). Я ожидал:

{ "_id" : "testFTS3", "firstName" : "René", "lastName" : "Martin", "email" : "rmartin@gmail.com" }
{ "_id" : "testFTS4", "firstName" : "Rene", "lastName" : "Martin", "email" : "rmartin@gmail.com" }

Есть ли способ избежать акцентов (диакритические знаки) с помощью поиска в Mongodb Atlas?

Я думаю, что мне нужен анализатор сворачивания ascii, но Я не нашел его в списке анализаторов: https://docs.atlas.mongodb.com/reference/atlas-search/analyzers/#analyzers -ref

Использование сортировки не работает:

db.testJTAFulltextSearch.aggregate([{$searchBeta: {index: "customer", text: {query: "René", path: ["_id", "firstName",
 "email"]}}}], {collation: {locale: "en", strength: 1}})

По-прежнему возвращает только "Рене"

1 Ответ

0 голосов
/ 27 марта 2020

Вы пробовали конфигурацию fuzzy? По-видимому, он не включен по умолчанию, но fuzzy: { maxEdits: 2 } должен вас охватить.

У меня недавно была похожая проблема , но я обнаружил, что на самом деле я виноват в неправильной настройке конфиг (prefixLength: 1 вместо значения по умолчанию 0) там - смотрите в теме. В моем случае я использую оператор term вместо text, но я не уверен, насколько это актуально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...