Diacritic Case-Insensitive search Loopback
Asked Answered
G

1

9

Is there any way to query results on Loopback+MongoDB with Diacritic-Case-Insensitive options?

For example, If I want to search for the query olimpic, and the database contains words like:

Olímpic
olimpic
Olimpic

Then, all of the above should be returned as results. I have tried with multiple queries listed below and other combinations, but nothing has worked so far.

{"where":{"name.text":{"like":"olimpic","options":"i"}}}
{"where":{"name.text":{"like":"/^olimpic$/i","options":"i"}}}
{"where":{"name.text":{"like":"/.*olimpic.*/i"}}}
{"where":{"name.text":{"regexp":"/.*olimpic.*/i"}}}

Any idea?

Thanks in advance!

Gaspar answered 2/11, 2015 at 14:53 Comment(7)
Have you tried anything so far? If so, you should share it.Leflore
@dustmouse all tests have been unsuccessful. when I found the solution, I will publish itGaspar
mhergon - That's fine. But it still doesn't hurt to show your attempt to demonstrate that you've made the effort to solve the problem.Leflore
dustmouse - I added more examples...Gaspar
@Gaspar for insensitive have you tried: {"where":{"name.text":{"regexp":"/(?i).*olimpic.*/i"}}} ?Hickman
@FedericoPiazza Yes, and return zero results. Thanks!Gaspar
@Gaspar You did not accept my answer, as far as I can see. Is there anything I can do to improve it so it becomes more useful to you?Birdsall
B
8

What you want ought to be possible with text indices as of version 3.1.7 of MongoDB. Please see SERVER-19557 for details. Earlier versions can not deal with diacritics.

Setting up a text index is rather easy: simply create an index on all fields you want to be searched – there can be only one text index per collection:

db.yourCollection.createIndex(
  {"name.text":"text","foo":"text"},
  {"default_language":"french"}
)

Now, to search your index, you simply do the following:

db.yourCollection.find(
  { $text: {$search:"Olimpic"} }
)

which should give you the expected results.

hth

Birdsall answered 6/11, 2015 at 10:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.