Files
database/initdb.d/10-wanikani.sql
T
2021-10-21 08:31:59 +07:00

65 lines
2.2 KiB
SQL
Executable File

CREATE TABLE "wanikani.subjects" (
"id" INT NOT NULL,
"updatedAt" TIMESTAMPTZ NOT NULL,
"object" TEXT NOT NULL,
"url" TEXT NOT NULL,
"data" JSONB NOT NULL,
-- slug: string
-- characters?: string
-- character_images?: { url: string; content_type: string; metadata: any }[]
-- amalgamation_subject_ids: int[]
-- visually_similar_subject_ids?: int[]
-- component_subject_ids?: int[]
-- meanings: { meaning: string; accepted_answer: boolean }[]
-- readings: { reading: string; type: string; accepted_answer: boolean; primary: boolean }[]
-- context_sentences?: { en: string; ja: string }[]
PRIMARY KEY ("id")
);
CREATE INDEX "idx_wanikani.subjects_object" ON "wanikani.subjects" ("object");
CREATE INDEX "idx_wanikani.subjects_data-characters" ON "wanikani.subjects" (("data" ->> 'characters'));
CREATE INDEX "idx_wanikani.subjects_data-level" ON "wanikani.subjects" ((("data" -> 'level')::int));
CREATE INDEX "idx_wanikani.subjects_data" ON "wanikani.subjects"
USING pgroonga("data")
WITH (
plugins='token_filters/stem',
token_filters='TokenFilterStem'
);
CREATE INDEX "idx_wanikani.subjects_data_kana" ON "wanikani.subjects"
USING pgroonga((identity("data")))
WITH (
tokenizer='TokenMecab',
normalizer='NormalizerNFKC100("unify_kana", true)'
);
CREATE MATERIALIZED VIEW "wanikani.subjects.sentences" AS (
SELECT
(s ->> 'ja') "ja",
(s ->> 'en') "en"
FROM "wanikani.subjects", jsonb_array_elements("data" -> 'context_sentences') "s"
WHERE s ->> 'ja' > ''
);
CREATE INDEX "idx_wanikani.subjects.sentences_ja" ON "wanikani.subjects.sentences"
USING pgroonga("ja")
WITH (
tokenizer='TokenMecab',
normalizer='NormalizerNFKC100("unify_kana", true)'
);
CREATE INDEX "idx_wanikani.subjects.sentences_ja_kana" ON "wanikani.subjects.sentences"
USING pgroonga((identity("ja")))
WITH (
tokenizer='TokenMecab("use_reading", true)',
normalizer='NormalizerNFKC100("unify_kana", true)'
);
CREATE INDEX "idx_wanikani.subjects.sentences_en" ON "wanikani.subjects.sentences"
USING pgroonga("en")
WITH (
plugins='token_filters/stem',
token_filters='TokenFilterStem'
);