使用EXTO和PostgreSQL进行全文搜索时出错(未定义的_表)
我正在尝试在我的Phoenix应用程序中使用Ecto和PostgreSQL实现一个非常基本的全文搜索。根据我控制器中的一个示例和PostgreSQL文档:使用EXTO和PostgreSQL进行全文搜索时出错(未定义的_表),postgresql,elixir,phoenix-framework,ecto,Postgresql,Elixir,Phoenix Framework,Ecto,我正在尝试在我的Phoenix应用程序中使用Ecto和PostgreSQL实现一个非常基本的全文搜索。根据我控制器中的一个示例和PostgreSQL文档: def search(conn, %{"q" => para}) do search = User |> User.search(para) |> Repo.all render(conn, "search.html", search: search) end 在我的“模型”文件中(以及User字段的定
def search(conn, %{"q" => para}) do
search = User |> User.search(para) |> Repo.all
render(conn, "search.html", search: search)
end
在我的“模型”文件中(以及User
字段的定义):
我得到了这个错误:
ERROR (undefined_table): missing FROM-clause entry for table "u"
查询中u的
是否足够(name
是User
字段之一)?您不能这样使用u.name
u
只是将查询编译为SQL时存在于Elixir中的名称。它在编译时被重命名。您需要在片段中添加另一个?
,并传递u.name
:
def search(query, search_term) do
from u in query,
where: fragment("to_tsvector(?) @@ plainto_tsquery(?)", u.name, ^search_term),
order_by: fragment("ts_rank(to_tsvector(?), plainto_tsquery(?)) DESC", u.name, ^search_term)
end
你不能那样使用u.name
u
只是将查询编译为SQL时存在于Elixir中的名称。它在编译时被重命名。您需要在片段中添加另一个?
,并传递u.name
:
def search(query, search_term) do
from u in query,
where: fragment("to_tsvector(?) @@ plainto_tsquery(?)", u.name, ^search_term),
order_by: fragment("ts_rank(to_tsvector(?), plainto_tsquery(?)) DESC", u.name, ^search_term)
end
它正在工作,但现在当尝试访问我的模板中的
时,我遇到了另一个错误,因为我从模型中获取了所有数据:Phoenix.HTML中的列表,模板可能只包含表示字节、二进制文件或其他列表的整数,获取了无效条目:%MyProj.User{uuuu meta}Ecto.Schema.Metadata,联系人:“Tlm:22222”,详细信息:nil,facebook:nil,id:16,插入地址:#exto.DateTime,名称:“blabla”,更新地址:#exto.DateTime,网页:nil}
。我尝试使用点符号但没有成功…@search
是一个列表。您到底想从列表中打印什么?您可以使用类似于的内容来处理:对!我只是太难过了,想不清楚!第一次使用SQL时,我感觉自己永远也不会理解它:)当我陷入困境时,我会提出一些更加集中的问题。谢谢你,狗伯特!它正在工作,但现在当尝试访问我的模板中的
时,我遇到了另一个错误,因为我从模型中获取了所有数据:Phoenix.HTML中的列表,模板可能只包含表示字节、二进制文件或其他列表的整数,获取了无效条目:%MyProj.User{uuuu meta}Ecto.Schema.Metadata,联系人:“Tlm:22222”,详细信息:nil,facebook:nil,id:16,插入地址:#exto.DateTime,名称:“blabla”,更新地址:#exto.DateTime,网页:nil}
。我尝试使用点符号但没有成功…@search
是一个列表。您到底想从列表中打印什么?您可以使用类似于的内容来处理:对!我只是太难过了,想不清楚!第一次使用SQL时,我感觉自己永远也不会理解它:)当我陷入困境时,我会提出一些更加集中的问题。谢谢你,狗伯特!