diff --git a/lib/search/word_search/entry_id_query.dart b/lib/search/word_search/entry_id_query.dart index 0e7fcdb..3a926bb 100644 --- a/lib/search/word_search/entry_id_query.dart +++ b/lib/search/word_search/entry_id_query.dart @@ -39,43 +39,10 @@ SearchMode _determineSearchMode(String word) { fts_results AS ( SELECT "${tableName}FTS"."entryId", - CASE - WHEN "${tableName}FTS"."reading" = ? THEN 150 - ELSE 100 - END + 100 + + "${tableName}"."baseScore" + + (("${tableName}FTS"."reading" = ?) * 50) - (substr(COALESCE("${TanosJLPTTableNames.jlptTag}"."jlptLevel", 'N0'), 2) * -5) - + CASE - WHEN "${tableName}"."news" = 1 - OR "${tableName}"."ichi" = 1 - OR "${tableName}"."spec" = 1 - OR "${tableName}"."gai" = 1 - THEN 50 - ELSE 0 - END - + CASE - WHEN "${tableName}"."news" = 1 THEN 10 - WHEN "${tableName}"."news" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "${tableName}"."ichi" = 1 THEN 10 - WHEN "${tableName}"."ichi" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "${tableName}"."spec" = 1 THEN 10 - WHEN "${tableName}"."spec" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "${tableName}"."gai" = 1 THEN 10 - WHEN "${tableName}"."gai" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "${tableName}"."orderNum" = 1 THEN 20 - ELSE 0 - END AS "score" FROM "${tableName}FTS" LEFT JOIN "${TanosJLPTTableNames.jlptTag}" USING ("entryId") @@ -91,39 +58,8 @@ SearchMode _determineSearchMode(String word) { SELECT "entryId", 50 + + "${tableName}"."baseScore" - (substr(COALESCE("${TanosJLPTTableNames.jlptTag}"."jlptLevel", 'N0'), 2) * -5) - + CASE - WHEN "${tableName}"."news" = 1 - OR "${tableName}"."ichi" = 1 - OR "${tableName}"."spec" = 1 - OR "${tableName}"."gai" = 1 - THEN 50 - ELSE 0 - END - + CASE - WHEN "${tableName}"."news" = 1 THEN 10 - WHEN "${tableName}"."news" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "${tableName}"."ichi" = 1 THEN 10 - WHEN "${tableName}"."ichi" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "${tableName}"."spec" = 1 THEN 10 - WHEN "${tableName}"."spec" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "${tableName}"."gai" = 1 THEN 10 - WHEN "${tableName}"."gai" = 2 THEN 5 - ELSE 0 - END - + CASE - WHEN "orderNum" = 1 THEN 20 - ELSE 0 - END AS "score" FROM "${tableName}" LEFT JOIN "${TanosJLPTTableNames.jlptTag}" USING ("entryId") diff --git a/migrations/0001_JMDict.sql b/migrations/0001_JMDict.sql index 2c12fed..192e7de 100644 --- a/migrations/0001_JMDict.sql +++ b/migrations/0001_JMDict.sql @@ -47,12 +47,24 @@ CREATE TABLE "JMdict_KanjiElement" ( "spec" INTEGER CHECK ("spec" BETWEEN 1 AND 2), "gai" INTEGER CHECK ("gai" BETWEEN 1 AND 2), "nf" INTEGER CHECK ("nf" BETWEEN 1 AND 48), + "baseScore" INTEGER NOT NULL AS ( + (("news" IS 1 OR "ichi" IS 1 OR "spec" IS 1 OR "gai" IS 1) * 50) + + (("news" IS 1) * 10) + + (("news" IS 2) * 5) + + (("ichi" IS 1) * 10) + + (("ichi" IS 2) * 5) + + (("spec" IS 1) * 10) + + (("spec" IS 2) * 5) + + (("gai" IS 1) * 10) + + (("gai" IS 2) * 5) + + (("orderNum" IS 1) * 20) + ) STORED, PRIMARY KEY ("entryId", "reading"), UNIQUE("entryId", "orderNum") ) WITHOUT ROWID; CREATE INDEX "JMdict_KanjiElement_byEntryId_byOrderNum" ON "JMdict_KanjiElement"("entryId", "orderNum"); -CREATE INDEX "JMdict_KanjiElement_byReading" ON "JMdict_KanjiElement"("reading"); +CREATE INDEX "JMdict_KanjiElement_byReading_byBaseScore" ON "JMdict_KanjiElement"("reading", "baseScore"); CREATE TABLE "JMdict_KanjiElementInfo" ( "entryId" INTEGER NOT NULL, @@ -75,12 +87,24 @@ CREATE TABLE "JMdict_ReadingElement" ( "spec" INTEGER CHECK ("spec" BETWEEN 1 AND 2), "gai" INTEGER CHECK ("gai" BETWEEN 1 AND 2), "nf" INTEGER CHECK ("nf" BETWEEN 1 AND 48), + "baseScore" INTEGER NOT NULL AS ( + (("news" IS 1 OR "ichi" IS 1 OR "spec" IS 1 OR "gai" IS 1) * 50) + + (("news" IS 1) * 10) + + (("news" IS 2) * 5) + + (("ichi" IS 1) * 10) + + (("ichi" IS 2) * 5) + + (("spec" IS 1) * 10) + + (("spec" IS 2) * 5) + + (("gai" IS 1) * 10) + + (("gai" IS 2) * 5) + + (("orderNum" IS 1) * 20) + ) STORED, PRIMARY KEY ("entryId", "reading"), UNIQUE("entryId", "orderNum") ) WITHOUT ROWID; CREATE INDEX "JMdict_ReadingElement_byEntryId_byOrderNum" ON "JMdict_ReadingElement"("entryId", "orderNum"); -CREATE INDEX "JMdict_ReadingElement_byReading" ON "JMdict_ReadingElement"("reading"); +CREATE INDEX "JMdict_ReadingElement_byReading_byBaseScore" ON "JMdict_ReadingElement"("reading", "baseScore"); CREATE TABLE "JMdict_ReadingElementRestriction" ( "entryId" INTEGER NOT NULL,