在我的Phoenix應用程序的一個表中,我有一個字符串數組。我希望能夠使用where: like()
類型的查詢來查看數組中的任何值是否包含查詢字符串 - 但是,我不確定如何執行此操作。在應用程序中的前一次迭代,有問題的領域只是一個字符串字段,以及下面的查詢工作完美:Phoenix/Ecto - 查詢字符串數組中的匹配項
results = from(u in User,
where: like(u.fulltext, ^("%#{search_string}%"))
|> Repo.all()
現在,我已經改變了fulltext
場到字符串數組(character varying(255)[]
,Postgres裏計),這個查詢理解失敗,出現錯誤
ERROR 42883 (undefined_function): operator does not exist: character varying[] ~~ unknown
,但我不知道我怎麼會細化查詢相匹配的新的模式。
例如,用戶的fulltext
領域會像
["john smith", "[email protected]"]
當search_string
是"john"
或"@test"
或"n smith"
等應退還相關記錄 - 如果search_string
任的任何部分匹配列表值。
用普通英語,查詢會讀取類似於「返回記錄,其中在列表u.fulltext
中找到類似search_string
的值」。
我能想到的各種「哈克」的解決方法,就像剛返回的所有用戶的列表,然後使用一些鏈接Enum.map
功能,通過它們來運行,並檢查fulltext
值部分匹配,但如果有一個更優雅的解決方案使用Ecto的查詢語法,我寧願選擇它。任何人都可以提供指導嗎?