Order detected duplicates based on L2 distance from query point

This commit is contained in:
Liam 2024-07-21 19:12:41 -04:00
parent ddf166d1a6
commit f6c511ce48
2 changed files with 19 additions and 0 deletions

View file

@ -3,7 +3,9 @@ defmodule Philomena.DuplicateReports do
The DuplicateReports context.
"""
import Philomena.DuplicateReports.Power
import Ecto.Query, warn: false
alias Ecto.Multi
alias Philomena.Repo
@ -46,6 +48,14 @@ defmodule Philomena.DuplicateReports do
where:
i.image_aspect_ratio >= ^(aspect_ratio - aspect_dist) and
i.image_aspect_ratio <= ^(aspect_ratio + aspect_dist),
order_by: [
asc:
power(it.nw - ^intensities.nw, 2) +
power(it.ne - ^intensities.ne, 2) +
power(it.sw - ^intensities.sw, 2) +
power(it.se - ^intensities.se, 2) +
power(i.image_aspect_ratio - ^aspect_ratio, 2)
],
limit: ^limit
end

View file

@ -0,0 +1,9 @@
defmodule Philomena.DuplicateReports.Power do
@moduledoc false
defmacro power(left, right) do
quote do
fragment("power(?, ?)", unquote(left), unquote(right))
end
end
end