lib/search/word_search: move some score calculation to virtual column
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user