나는 간단한 모델이 있습니다는
schema "torrents" do
field :name, :string
field :magnet, :string
field :leechers, :integer
field :seeders, :integer
field :source, :string
field :filesize, :string
timestamps()
end
을 그리고 이름에 따라 검색 할. 관련 확장과 색인을 데이터베이스와 테이블에 추가했습니다.
def change do
create table(:torrents) do
add :name, :string
add :magnet, :text
add :leechers, :integer
add :seeders, :integer
add :source, :string
add :filesize, :string
timestamps()
end
execute "CREATE EXTENSION pg_trgm;"
execute "CREATE INDEX torrents_name_trgm_index ON torrents USING gin (name gin_trgm_ops);"
create index(:torrents, [:magnet], unique: true)
end
나는 검색어, 를 사용하여 검색하기 위해 노력하고있어하지만 난 항상 0이 결과 얻을.
def search(query, search_term) do
from(u in query,
where: fragment("? % ?", u.name, ^search_term),
order_by: fragment("similarity(?, ?) DESC", u.name, ^search_term))
end
SELECT t0."id", t0."name", t0."magnet", t0."leechers", t0."seeders", t0."source",
t0."filesize", t0."inserted_at", t0."updated_at" FROM "torrents"
AS t0 WHERE (t0."name" % $1) ORDER BY similarity(t0."name", $2) DESC ["a", "a"]
내 검색 기능에 문제가 있습니까?
콘솔에 오류가 기록됩니까? PostgreSQL 문서에서'% '가'WHERE (t0. "name"% $ 1 ")에 무엇을 의미하는지 찾을 수 없습니다. – Dogbert
@Dogbert 오류가 없으며 적절한 SQL 명령 출력 만 있습니다. 이 기사의 명령이 있습니다. http://blog.rokkincat.com/postgres-full-text-search-inecto/ –
테이블에 어떤 레코드가 있습니까? 여러분의 질의는 이름에 'a'가 포함 된 모든 레코드와 일치하지는 않을 것이지만, 충분히 비슷한 이름을 가진 레코드와 일치합니다. 이름이 ""a "인 레코드를 만들고 동일한 쿼리를 실행하십시오. 또는''ab ''와''abc ''를 만들고''ab''를 검색하십시오. – Dogbert