#Peeweeとは
peeweeはPython用のORMです。
扱えるデータベースが豊富で利点も多いですがなにぶん公式ドキュメント以外の参考資料が少ない印象です
#Peeweeで全文検索をやってみたい
現在関わっているプロジェクトであいまい検索を行いたいとの話が出てきた為、peeweeの資料を読み漁って
やり方を探してみましたが、いまいちわかりずらいです。
その為、googleで探してみたところ以下のブランチが見つかりました。
https://github.com/coleifer/peewee/issues/1955
#環境
- peewee:3.14.2
- python3.8
#参考ブランチを元に全文検索を行ってみる
全文検索を行うにはまず既存のDBのテーブル変更を行う必要がありそうです
ALTER TABLE TESTDB.staff add FULLTEXT (user_name) WITH PARSER ngram;
※おそらくpeeweeのModel設定を変更し、反映した方が良さそうですがやり方を調べても見つからなかったため今回は
直接変更を行っています
query = TESTDB.select().where(Match(TESTDB.user_name,name))
def Match(columns, expr, modifier=None):
"""
Match
Parameters
----------
columns : peewee_obj(検索対象のフィールド)
list,tupleでの複数指定可能
expr : str(検索文字列)
modifier : str(修飾子)
Returns
-------
NodeList (where条件)
"""
if isinstance(columns, (list, tuple)):
match = peewee.fn.MATCH(*columns) # Tuple of one or more columns / fields.
else:
match = peewee.fn.MATCH(columns) # Single column / field.
args = expr if modifier is None else peewee.NodeList((expr, SQL(modifier)))
return peewee.NodeList((match, peewee.fn.AGAINST(args)))
上記にて検索を行ったところうまくあいまい検索
にて取得することが取得することができました。
#注意事項
上記の方法であいまい検索を
行う場合ですが、一文字でのあいまい検索はできません
- 例:検索できる: 検索対象:あいうえお ⇨ 検索文字:あい/いう/うえ/えお
- 検索できない : 検索対象:あいうえお ⇨ 検索文字:あ/い/う/え/お ⇨ 0件で返却される