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

Ecto not allowing fragment parameter for mysql fulltext search

我正在尝试使用一个片段在 ecto 中实现全文搜索。但是,它抛出一个错误,它不允许我使用搜索词的参数。

parameters must be of length 1 for query %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)
)

? in fragment 不是纯字符串替换。您需要将 * 附加到片段 SQL 之外,而片段 SQL 应该只有 (? IN BOOLEAN MODE).

变化:

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

收件人:

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