我正在尝试让类似 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 “Asymptote”。使用 where:like/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 索引中找不到它的原因,但为什么 like/2 或 ilike/2 不起作用?当输入全名“Asymptote”时,我能够找到记录。