我正在尝试使用片段在ecto中实现全文搜索。但是,它会抛出一个错误,它不允许我将该参数用于搜索词。
对于查询%Mariaex.Query ,参数的长度必须为1
ZB.Repo.all(
from contact in ZB.Contact,
where: contact.account_id == ^account_id,
where: fragment("MATCH (name,email,phone,address_1,city,state,postal_code) AGAINST ('?*' IN BOOLEAN MODE)", ^search_term)
)
答案 0 :(得分:4)
?
中的 fragment
不是纯字符串替换。您需要在片段SQL之外附加*
,并且片段SQL应该只有(? IN BOOLEAN MODE)
。
变化:
fragment("... AGAINST ('?*' IN BOOLEAN MODE)", ^search_term)
要:
fragment("... AGAINST (? IN BOOLEAN MODE)", ^(search_term <> "*"))