Quantcast
Channel: Mattermost Discussion Forums - Latest posts
Viewing all articles
Browse latest Browse all 25778

MySQL and Postgres to support Japanese search

$
0
0

元々は、(GitLab CEと一緒にyumパッケージ管理したいので)どうすればMattermostのソースコードを変更せずに日本語検索対応できるのだろう、というのが考え始めたきっかけです。

最初考えたのは、MySQLと同様(Issue #2033)N-gram indexを張れば良いのでは、というものですが、

  • PostgreSQLではそもそもindexが使用されていない(Issue #2622)
  • PostgreSQLでの N-gram 検索は 照合演算子(@@) ではなく LIKE を使用する

ためソース変更しない前提では不可能であることが分かりました。

そこで、次に考えたのが形態素解析による検索で、これはtextsearch_jaとMeCabを使うことで実現できましたのでIssue #2159にFYIとして記載しました。

以上が経緯になります。

個人的にはいいと思うんですが、N-gramって日本語以外のマルチバイト文字列でも使えるはずなので、その辺も考慮できればよりいいんじゃないでしょうか。

最終的に本体に取り込んでもらえるのであれば、私もN-gram検索できるよう変更するのが望ましいと思います。(ググった限り、textsearch_ja & MeCab 方式はちょっとレガシーみたいですし…)
ただ、英語圏の人にとってはN-gramのLIKE検索は使い勝手が悪いと思うので、現在の@@検索とどちらを使うか選択できるようになっていなければならないのでは、とも思います。


(以下、N-gramの話は置いておいて、@@検索について)

私が現在理解している範囲においては、理想的には、暗黙的に使用されるdefault_text_search_config設定に依存すべきでなく、すべてのto_tsvectorに対して明示的にregconfigパラメータ('english''japanese')が指定されるべきであると考えています。

なぜなら、regconfigを明示しない場合にはIndex ScanされずSeq Scanで実行されるため、パフォーマンス上の懸念となるためです。
(注: 実際どの程度パフォーマンスに差異があるのか計測したわけではなく、まあそうなんだろうなあ、という想像で書いています。)

ただし、ハードコーディングすると多言語化の妨げになるため、外部設定できるのが望ましいと考えます。

つまり、私が望ましいと考えるのはB案ということになります。

以下補足ですが、A案に書かれている

to_tsvector('english', MESSAGE)を to_tsvector(MESSAGE) に変更

については、すみません、説明が下手なせいで誤解を招いてしまっているようです。
CREATE INDEX時にはto_tsvectorへのregconfigパラメータ指定は必須です。無ければエラーになります。
(仮に実行時の言語指定によって挙動を変えられるようにするとなると、都度index再作成が必要になりますからね…)
ただしこの部分は、ハードコーディングされていたとしても、MySQLと同様にユーザ自身がindexを張り直すことはできるのであまり深刻では無いと考えます。

「A案だと他のpostgresを利用しているソフトウェア(e.g. GitLab)にも影響する可能性があるので、B案が良い」

regconfigを明示せずdefault_text_search_configを利用する実装になっているとindexが働かないため修正すべきでは、というのが意図になります。
(GitLabにも影響しそうだからdefault_text_search_config変更を避けたい、というのも多少はあるのですが、まあそれはMattarmost側からしたら知ったこっちゃないですよね…)


Viewing all articles
Browse latest Browse all 25778

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>