sqliteでFTS3を使用しようとしていて、目的の結果を返さないクエリを実行しています。クエリは次のとおりです。
select * from table1 where col1 MATCH 'rain';
このクエリは、私が望まないテキスト'strain'を含むcol1も返します。このクエリの正確なレプリカが必要です。
select * from table1 where col1 like '% rain %';
提案/コメント/ヘルプはありますか?
sqliteでFTS3を使用しようとしていて、目的の結果を返さないクエリを実行しています。クエリは次のとおりです。
select * from table1 where col1 MATCH 'rain';
このクエリは、私が望まないテキスト'strain'を含むcol1も返します。このクエリの正確なレプリカが必要です。
select * from table1 where col1 like '% rain %';
提案/コメント/ヘルプはありますか?
なぜこの結果が得られるのかわかりません。投稿したMATCHクエリに一致する用語でのみ結果が得られるはずです。FTS3CREATE TABLE
ステートメントを投稿できますか?
例えば:
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE VIRTUAL TABLE mail USING fts3(subject, body);
sqlite> INSERT INTO mail(docid, subject, body) VALUES(1, 'software feedback', 'found it too slow');
sqlite> INSERT INTO mail(docid, subject, body) VALUES(2, 'software feedback', 'no feedback');
sqlite> INSERT INTO mail(docid, subject, body) VALUES(3, 'slow lunch order', 'was a software problem');
sqlite> select * from mail where body match 'back';
sqlite> select * from mail where body match 'feedback';
software feedback|no feedback
sqliteデータベースのFTS3/FTS4の場合、単純なデフォルトのトークナイザーは、テキスト列の要素をトークン化するときに「(」と「)」を無視すると結論付けます。他の特殊文字もチェックできるとは思えないので、他の特殊文字もチェックできます。一致クエリが実行されると、これらの値は無視されました。これが私のシナリオのテストケースです:
create virtual table tab1 using fts3(val text);
insert into tab1 values('this is rain test');
insert into tab1 values('this is strain test');
insert into tab1 values('this is (rain) test with parenthesis');
insert into tab1 values('rain test');
insert into tab1 values('this is rain');
insert into tab1 values('strain test');
insert into tab1 values('this is strain');
次のクエリを実行した後:
select * from tab1 where val MATCH 'rain';
結果は次のとおりです。
this is rain test
this is (rain) test with parenthesis
rain test
this is rain