Я пытаюсь получить экто как запрос работает так:Ecto где, как запрос действует как где ==
def find(searchterm) do
query = from c in Contact,
#where: fragment("? % ?", c.company_name, ^searchterm),
where: like(c.company_name, ^searchterm),
contacts = Repo.all(query)
{:ok, contacts}
end
В моей таблице, у меня есть COMPANY_NAME «асимптота». Использование где: как/2 мой запрос выглядит следующим образом:
SELECT c0."id", c0."company_id", c0."company_name" FROM "contacts" AS c0 WHERE (c0."company_name" LIKE $1) ["Asym"] (1.0ms)
при поиске pg_trm раскомментирована, это выглядит следующим образом:
SELECT c0."id", c0."company_id", c0."company_name" FROM "contacts" AS c0 WHERE (c0."company_name" % $1) ["Asym"] (1.0ms)
Насколько я могу видеть, запросы выглядят хорошо, но результатов нет. Поскольку я добавил индекс после добавления «Асимптота» в базу данных, я ожидаю, что именно поэтому он не найден в индексе pg_trm, но почему не понравится/2 или ilike/2? При вводе полного имени «Асимптота» я могу найти запись.
Я думаю, что это проблема с лимитом соответствия подобия по умолчанию с pg_trgm. Он способен находить более короткие значения в столбце company_name только отлично (например, «google»), поэтому я думаю, что это проблема с параметром ограничения по умолчанию. как/2, не должно работать так, хотя –