Ecto不允许用于全文搜索的片段参数

问题描述:

我试图在ecto中用片段实现全文搜索。但是,它抛出了一个错误,即它不允许我使用搜索项的参数。Ecto不允许用于全文搜索的片段参数

参数必须是长度为1的查询%Mariaex.Query

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) 
) 
+1

这是否工作:'片段(“MATCH(姓名,电子邮件,电话,ADDRESS_1,城市,州,POSTAL_CODE)反对(IN BOOLEAN? MODE)“,^(search_term ”*“))'? – Dogbert

+0

是的,非常感谢!你可以添加一个答案 –

fragment?不是纯字符串替换。您需要在片段SQL外附加*,并且片段SQL应该只有(? IN BOOLEAN MODE)

变化:

fragment("... AGAINST ('?*' IN BOOLEAN MODE)", ^search_term) 

要:

fragment("... AGAINST (? IN BOOLEAN MODE)", ^(search_term <> "*"))