pvasa
05/19/2020, 6:05 PMSELECT *
on either but when I try to use MATCH
on fts table, it always returns empty dataset.
Is there any extra step required to enable fts?
Am I missing something for the setup?
Below are the queries I use to setup tables
Create content table
CREATE TABLE dbBook (
isbn INTEGER NOT NULL PRIMARY KEY,
title TEXT NOT NULL,
subtitle TEXT NOT NULL DEFAULT '',
coverUrl TEXT DEFAULT NULL,
summary TEXT NOT NULL DEFAULT '',
authorIds TEXT AS List<Long> NOT NULL,
revisions TEXT AS List<Long> NOT NULL DEFAULT '',
publishedOn INTEGER as Date DEFAULT NULL,
addedAt INTEGER as DateTime NOT NULL DEFAULT ((julianday('now') - 2440587.5) * 86400.0 * 1000)
);
Create fts table
CREATE VIRTUAL TABLE dbBookFts
USING FTS4(
tokenize=porter,
content=dbBook,
isbn INTEGER NOT NULL,
title TEXT NOT NULL,
subtitle TEXT NOT NULL,
summary TEXT NOT NULL
);
Triggers to update fts table
-- Triggers to keep the FTS index up to date.
CREATE TRIGGER dbBook_bu BEFORE UPDATE ON dbBook BEGIN
DELETE FROM dbBookFts WHERE isbn=old.isbn;
END;
CREATE TRIGGER dbBook_bd BEFORE DELETE ON dbBook BEGIN
DELETE FROM dbBookFts WHERE isbn=old.isbn;
END;
CREATE TRIGGER dbBook_au AFTER UPDATE ON dbBook BEGIN
INSERT INTO dbBookFts(isbn, title, subtitle, summary)
VALUES(new.isbn, new.title, new.subtitle, new.summary);
END;
CREATE TRIGGER dbBook_ai AFTER INSERT ON dbBook BEGIN
INSERT INTO dbBookFts(isbn, title, subtitle, summary)
VALUES(new.isbn, new.title, new.subtitle, new.summary);
END;
Query for searching
SELECT dbBook.*
FROM dbBookFts
JOIN dbBook ON dbBookFts.isbn = dbBook.isbn
WHERE dbBookFts MATCH :query;
Even a simple MATCH query is empty
SEELCT * FROM dbBookFts WHERE dbBookFts MATCH :query;
Dominaezzz
05/19/2020, 8:21 PMpvasa
05/19/2020, 8:41 PMpvasa
05/19/2020, 10:16 PMalec
05/20/2020, 1:50 PMWHERE content MATCH :query
?pvasa
05/20/2020, 2:54 PMSELECT * FROM fts_table WHERE fts_table MATCH 'query';
?pvasa
05/20/2020, 2:56 PMErik Christensen
05/20/2020, 4:18 PMpvasa
05/20/2020, 7:06 PMcontent=
and thus completely relying on triggers but still same behaviour.
I am seeing this trace from system on Android
SQLiteDatabase: Error inserting period=6962000 preferred_charging_state=1 preferred_network_type=1 target_class=com.google.android.gms.measurement.PackageMeasurementTaskService required_network_type=0 runtime=1590001184152 required_idleness_state=0 source=16 service_kind=0 target_package=com.google.android.gms source_version=201516000 last_runtime=0 user_id=0 job_id=-1 requires_charging=0 tag=Measurement.PackageMeasurementTaskService.UPLOAD_TASK_TAG flex_time=3480000 task_type=0 retry_strategy={"maximum_backoff_seconds":{"3600":0},"initial_backoff_seconds":{"30":0},"retry_policy":{"0":0}}
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (code 2067 SQLITE_CONSTRAINT_UNIQUE[2067])
Although when I run same insert
operations on mac on the same database file, everything looks good and I am able to do MATCH queriespvasa
05/20/2020, 7:09 PMErik Christensen
05/21/2020, 1:30 AMpvasa
05/21/2020, 2:07 PM