sto cercando di ottenere un ecto come query di lavorare in questo modo:Ecto dove come interrogazione in cui agisce come ==
def find(searchterm) do
query = from c in Contact,
#where: fragment("? % ?", c.company_name, ^searchterm),
where: like(c.company_name, ^searchterm),
contacts = Repo.all(query)
{:ok, contacts}
end
Nel mio tavolo, ho una company_name "Asymptote". Utilizzando dove: come/2 la mia domanda è simile al seguente:
SELECT c0."id", c0."company_id", c0."company_name" FROM "contacts" AS c0 WHERE (c0."company_name" LIKE $1) ["Asym"] (1.0ms)
quando la ricerca pg_trm senza commenti, sembra che questo:
SELECT c0."id", c0."company_id", c0."company_name" FROM "contacts" AS c0 WHERE (c0."company_name" % $1) ["Asym"] (1.0ms)
Per quanto posso vedere, le query sembrano buoni, ma non ci sono risultati Da quando ho aggiunto l'indice dopo aver aggiunto "Asymptote" al database, mi aspetto che sia per questo che non si trova nell'indice pg_trm, ma perché non piacerà/2 o ilike/2? Quando inserisco il nome completo "Asymptote", sono in grado di trovare il record.
Penso che questo sia un problema con il limite di corrispondenza di similarità predefinito con pg_trgm. È in grado di trovare valori più brevi nella colonna company_name (come "google"), quindi penso che questo sia un problema con il parametro limit di default. come/2 non dovrebbe funzionare in quel modo però –