This commit is contained in:
parent
3481b9dadf
commit
0c75776915
2 changed files with 23 additions and 6 deletions
|
|
@ -6,7 +6,16 @@ defmodule Mv.Membership.Member do
|
|||
require Ash.Query
|
||||
import Ash.Expr
|
||||
|
||||
@default_fields [:first_name, :last_name, :email, :phone_number, :city, :street, :house_number, :postal_code]
|
||||
@default_fields [
|
||||
:first_name,
|
||||
:last_name,
|
||||
:email,
|
||||
:phone_number,
|
||||
:city,
|
||||
:street,
|
||||
:house_number,
|
||||
:postal_code
|
||||
]
|
||||
|
||||
postgres do
|
||||
table "members"
|
||||
|
|
@ -132,9 +141,9 @@ defmodule Mv.Membership.Member do
|
|||
query
|
||||
|> Ash.Query.filter(
|
||||
expr(
|
||||
# Substring on numeric-like fields (best effort, supports middle substrings)
|
||||
fragment("search_vector @@ websearch_to_tsquery('simple', ?)", ^q2) or
|
||||
fragment("search_vector @@ plainto_tsquery('simple', ?)", ^q2) or
|
||||
# Substring on numeric-like fields (best effort, supports middle substrings)
|
||||
contains(postal_code, ^q2) or
|
||||
contains(house_number, ^q2) or
|
||||
contains(phone_number, ^q2) or
|
||||
|
|
@ -337,7 +346,7 @@ defmodule Mv.Membership.Member do
|
|||
query
|
||||
else
|
||||
args =
|
||||
case (opts[:fields] || opts["fields"]) do
|
||||
case opts[:fields] || opts["fields"] do
|
||||
nil -> %{query: q}
|
||||
fields -> %{query: q, fields: fields}
|
||||
end
|
||||
|
|
|
|||
|
|
@ -29,7 +29,10 @@ defmodule Mv.Membership.FuzzySearchTest do
|
|||
|
||||
result =
|
||||
Mv.Membership.Member
|
||||
|> Mv.Membership.Member.fuzzy_search(%{query: "john", fields: [:first_name, :last_name, :email]})
|
||||
|> Mv.Membership.Member.fuzzy_search(%{
|
||||
query: "john",
|
||||
fields: [:first_name, :last_name, :email]
|
||||
})
|
||||
|> Ash.read!()
|
||||
|
||||
assert Enum.map(result, & &1.id) == [john.id, alice.id]
|
||||
|
|
@ -59,7 +62,10 @@ defmodule Mv.Membership.FuzzySearchTest do
|
|||
|
||||
result =
|
||||
Mv.Membership.Member
|
||||
|> Mv.Membership.Member.fuzzy_search(%{query: "tomas", fields: [:first_name, :last_name, :email]})
|
||||
|> Mv.Membership.Member.fuzzy_search(%{
|
||||
query: "tomas",
|
||||
fields: [:first_name, :last_name, :email]
|
||||
})
|
||||
|> Ash.read!()
|
||||
|
||||
ids = Enum.map(result, & &1.id)
|
||||
|
|
@ -80,7 +86,9 @@ defmodule Mv.Membership.FuzzySearchTest do
|
|||
|> Mv.Membership.Member.fuzzy_search(%{query: ""})
|
||||
|> Ash.read!()
|
||||
|
||||
assert Enum.sort(Enum.map(result, & &1.id)) |> Enum.uniq() |> Enum.sort()
|
||||
assert Enum.sort(Enum.map(result, & &1.id))
|
||||
|> Enum.uniq()
|
||||
|> Enum.sort()
|
||||
|> Enum.all?(fn id -> id in [a.id, b.id] end)
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue