使用EXTO和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字段的定

我正在尝试在我的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
字段的定义):

我得到了这个错误:

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时,我感觉自己永远也不会理解它:)当我陷入困境时,我会提出一些更加集中的问题。谢谢你,狗伯特!