みんしゅみ PostgreSQLで全文検索
tsvector
と tsquery
を使うらしい。 (tsは text search
?)
列名::tsvector
で文字列をtsvector型にして tsvector @@ 検索文字列::tsquery = 't'
で検索するらしい
日本語検索できるの...?
tsquery
は & や | を使って検索条件を決めれるらしい。
'fat & rat'::tsquery
'fat & (rat | cat)'::tsquery
'fat & rat & ! cat'::tsquery
英語にさえ、言語学的なサポートがありません。派生語、たとえばsatisfiesに対してsatisfyを容易に扱えないため、正規表現は十分ではありません。
ん?そこも気を利かせてくれるのか.....?
Prismaに凄そうなものがあるるる
cockroachdbは未対応らしい。。。。対応してくれえええええ
queryRaw
でSQLゴリゴリ書く感じになりそう
日本語の辞書はどうすればいいの?
サポートされる辞書は、英語、デンマーク語、オランダ語、フィンランド語、フランス語、ドイツ語、ハンガリー語、 イタリア語、ノルウェー語、ポルトガル語、ロシア語、スペイン語、スウェーデン語、トルコ語です。追加の単純な辞書は、文書やクエリを正規化する際にステミングやストップワードは行いません。
https://www.cockroachlabs.com/docs/v23.1/full-text-search#text-search-configuration
指定された辞書以外のテキスト検索構成の側面。
https://www.cockroachlabs.com/docs/v23.1/full-text-search#unsupported-features
ということは日本語辞書はサポート外っていう理解で良さげ?
無理っぽいので自作するか
各言語のストップワードをまとめてるmarimoというプロジェクト的なのがあるらしい
日本語はここ
やることは以下っぽい
分かち書き
↓
ストップワード削除、同音異義語変換、大文字やカタカナを小文字やひらがなに、活用されてるものを原形にした結果の配列を保存してインデックス張る