1

FTS4 を使用した SQLite データベースがあります。次の形式のメッセージ ID を持つ電子メールを保存するために使用されます。

FTS MATCH 構文を使用してメッセージを検索すると、次の結果が得られます。

SELECT rowid FROM emails WHERE emails MATCH '<8200@comms.io>'

これにより、正しい行が返されます。しかし、複数のメールを検索しようとすると、空の応答が返されます。

SELECT rowid FROM emails WHERE emails MATCH '<8200@comms.io> OR <8188@comms.io>'

奇妙なことに、山括弧文字なしで検索できます。これは両方の行を返します。

SELECT rowid FROM emails WHERE emails MATCH '8200@comms.io OR 8188@comms.io'

これは、格納された列に山かっこが存在する場合でもです。これらが SQLite の特殊文字であるという言及は見つかりません。「OR」がなければ、単一用語検索は正常に機能します。

複合検索でこれらの文字の扱いが異なるのはなぜですか?

4

1 に答える 1

2

デフォルトの ( simple) トークナイザーは、英数字を読み取り、その他すべてを無視する単語区切りとして扱います。したがって、メッセージ ID を検索するときは、実際には複数の単語 ( 8200comms、およびio) を含むフレーズを検索する必要があります。

メッセージ ID 全体を単語として扱いたい場合は、カスタム tokenizerを作成する必要があります。

于 2012-12-30T08:57:30.353 に答える