65 lines
2.2 KiB
SQL
Executable File
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'
|
|
);
|