2

SQLite で FTS4 を使用して 2.3 のような数字を検索できるようにしたいのですが、. トークン境界として扱われています。完全にオーダーメイドのトークナイザーを書く以外に、. トークン境界文字のリストから?

10 進数を検索できることは一般的なユース ケースのようですが、SO / Google で関連するものは見つかりません。現時点での私の最善の解決策は、すべてを置き換えることです。既知の(長い)文字列を含むテキスト内の文字を検索し、それに応じて検索ごとに置き換えます...

ピーター

4

3 に答える 3

9

実際には、独自のトークナイザーを作成する必要はありません。

「単純な」トークナイザーでは区切り文字をカスタマイズできますが、これは文書化されていない機能です。

次のように FTS テーブルを作成すると、SQLite は ' ' (スペース) と '#' (ハッシュ) 文字のみをトークン化します。

CREATE VIRTUAL TABLE documents USING fts4(title, content, tokenize=simple '' '# ');

2012 年のこの機能に関する SQLite メーリング リストでの議論がここで行われました。この機能をサポートする SQLite のソース コードはこちらです。

ドキュメントの欠如に関するメーリングリストからの引用:

「おそらくその理由は、この機能が存在することすら忘れていたからです。2006 年に FTS1 が最初に導入されて以来、単純なトークナイザーにはそのまま存在していたようです。」

この機能を安全に使用できるかどうかについての引用:

「しかし、それは長い間コードに組み込まれてきたため、長年にわたって確立されたプログラムを破壊することを恐れて、あえて変更することはありません。」

...しかし、機能が完全にテストされている可能性が低いことも言及されました.

SQLite ユーザー メーリング リストにメールを送信し、この機能を文書化できるかどうか尋ねました。

更新: 追加したいことの 1 つは、「*」や「-」などの文字がこのように区切り文字として構成されている場合、クエリの FTS MATCH 句からも削除されることがわかったことです。したがって、これは '.' に対しては正常に機能しますが、など、FTS MATCHの特殊文字でもある文字には使用できません。

于 2014-09-16T15:30:42.517 に答える