Introduce separate search index

Uses a fts5 virtual table, kept up to date via triggers on the records
table.
This commit is contained in:
Claudio Ortolina
2024-11-22 10:01:48 +00:00
parent be36c29f76
commit 2e2000fe01
6 changed files with 215 additions and 27 deletions
+10 -10
View File
@@ -3,7 +3,7 @@ defmodule MusicLibrary.RecordsTest do
use MusicLibrary.DataCase
alias MusicLibrary.Records
alias MusicLibrary.Records.Record
alias MusicLibrary.Records.SearchIndex
alias MusicBrainz.APIBehaviourMock
import MusicLibrary.RecordsFixtures
import MusicLibrary.ReleaseGroupsFixtures
@@ -26,7 +26,7 @@ defmodule MusicLibrary.RecordsTest do
# when searching we do not return all record fields (e.g. cover data)
# so we rely on record ids to compare results
defp search(query, limit, offset) do
Record
SearchIndex
|> Records.search_records(query, limit: limit, offset: offset)
|> Enum.map(& &1.id)
end
@@ -115,24 +115,24 @@ defmodule MusicLibrary.RecordsTest do
setup [:create_records]
test "untagged search" do
assert 2 == Records.search_records_count(Record, "brave")
assert 2 == Records.search_records_count(SearchIndex, "brave")
end
test "tagged search - album" do
assert 1 == Records.search_records_count(Record, ~s(album:"Brave \(Live\)"))
assert 1 == Records.search_records_count(SearchIndex, ~s(album:"Brave \(Live\)"))
end
test "tagged search - artist" do
assert 2 == Records.search_records_count(Record, "artist:airbag")
assert 1 == Records.search_records_count(Record, ~s(artist:"airbag \(AU\)"))
assert 2 == Records.search_records_count(SearchIndex, "artist:airbag")
assert 1 == Records.search_records_count(SearchIndex, ~s(artist:"airbag \(AU\)"))
end
test "tagged search - format" do
assert 1 == Records.search_records_count(Record, "brave format:cd")
assert 1 == Records.search_records_count(SearchIndex, "brave format:cd")
end
test "tagged search - type" do
assert 1 == Records.search_records_count(Record, "brave type:live")
assert 1 == Records.search_records_count(SearchIndex, "brave type:live")
end
test "tagged search - mbid", %{records: [_, _, _, greatest_show_on_earth, libertad]} do
@@ -140,9 +140,9 @@ defmodule MusicLibrary.RecordsTest do
[airbag_au_mbid] = Enum.map(libertad.artists, fn a -> a.musicbrainz_id end)
assert 1 ==
Records.search_records_count(Record, "mbid:#{airbag_mbid}")
Records.search_records_count(SearchIndex, "mbid:#{airbag_mbid}")
assert 1 == Records.search_records_count(Record, "mbid:#{airbag_au_mbid}")
assert 1 == Records.search_records_count(SearchIndex, "mbid:#{airbag_au_mbid}")
end
end