Этот вопрос старше и включает fts3 , но я подумал, что добавлю обновление, чтобы показать, как вы можете сделать это, используя более новую fts5 .
Давайте начнем с настройки тестовой среды в командной строке:
$ sqlite3 ":memory:"
Затем создаем таблицу fts5, которая может обрабатывать тире:
sqlite> CREATE VIRTUAL TABLE IF NOT EXISTS blah USING fts5(term, tokenize="unicode61 tokenchars '-'");
Обратите внимание на тонкое использование двойных и одинарных кавычек в значении tokenize
.
С установкой вне пути, давайте добавим некоторые значения для поиска:
sqlite> INSERT INTO blah (term) VALUES ('bacon-and-eggs');
sqlite> INSERT INTO blah (term) VALUES ('bacon');
sqlite> INSERT INTO blah (term) VALUES ('eggs');
Тогда давайте действительно поищем их:
sqlite> SELECT * from blah WHERE term MATCH '"bacon-and-eggs"';
bacon-and-eggs
sqlite> SELECT * from blah WHERE term MATCH '"bacon"*';
bacon-and-eggs
bacon
Еще раз обратите внимание на тонкое использование двойных и одинарных кавычек для поискового запроса.