もちろんPythonです。Javaじゃありません。
ともかく、一応SearchableModelというクラスで全文検索らしきことができるのですが、
当然マルチバイトなんて知らないわけです。
まあ、こんな感じで使いますが。
def Hoge(SearchableModel):
id = db.IntegerProperty()
name = db.StringProperty()
q = Hoge.all().search("hoge")
問題点としては、
・スペース区切りで単語を分ける(日本語はどないすんのじゃ)
・二文字以下はインデックスしない(そりゃ英語はいいわな、それで)
・検索する単語も二文字以下はなかったことになる(絞り込みできない)
ところが、こちとら日本人な訳で、なんとかせにゃならん訳です。
GAEだと分かち書きエンジン導入も面倒だし。
で、検索対象の文字列が50文字程度なら、こうしたらいいのでは?と。
・N-Gramもどき(一文字、二文字、三文字…で文章を分割)で文字列を分割
・これで出来た文字列の二文字以下のものは、マルチバイト文字列の何かを足して三文字にする(足した文字は検索でも使う)
・これらをスペースで繋げて、インデックス用プロパティに保存
・後はSearchableModelが勝手にインデックス化
実際に実装したところ、きちんと日本語で全文検索できてます。
これで少しは役に立つかな?
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿