Kouhei Sutou
kou****@clear*****
2014年 7月 29日 (火) 21:48:10 JST
須藤です。 In <000701cfaaff$eaf4ae00$c0de0a00$@fmk.jp> "[groonga-dev,02540] 中黒「・」を含む単語の存在する文章の検索について" on Tue, 29 Jul 2014 16:37:14 +0900, "FMK" <devel****@fmk*****> wrote: > はじめまして。中村と申します。 ようこそ! > こちらのメーリングリストで扱う内容としてふさわしくなかったらご容赦ください。 ぜんぜんそんなことはありません! 歓迎です。どんどんやってください! > そこで質問なのですが、 > 中黒「・」を含む単語、例えば「アル・カポネ」などの人名 > を含む文章を全文検索したい場合、文章の文脈次第で「アル・カポネ」という > キーワードでは思うような検索ができないことがあるかと考えます。 > この場合、1つの解法として全文検索用のテーブルを別個用意し、 > 「アル・カポネ」から中黒「・」を除去した「アルカポネ」を格納し、 > 検索時も同様に「・」を除去して「アルカポネ」で検索することにより、 > 表記のゆらぎに関係なくヒットするようになるかと存じます。 一般的に、ゆらぎを吸収するやりかたは次の3通りあります。 (一般的というか、今、パッと思い付いた方法ですけど。。。) 1. 検索対象の文書と検索文字列を正規化 (↑の方法) 2. 検索対象の文書はそのままで検索時にゆらぎすべてでOR検索 3. 検索対象の文書の索引を作るときにゆらぎすべてを索引に登 録し、検索時はそのまま検索 それぞれのメリット・デメリットは次の通りです。 1. 検索対象の文書と検索文字列を正規化 メリット: * 一回の検索でゆらぎを検出できるので高速。 デメリット: * ゆらぎの種類を追加・削除するたびに索引を再構築する必要が あるので、検索できない期間がある。 2. 検索対象の文書はそのままで検索時にゆらぎすべてでOR検索 メリット: * ゆらぎの種類を追加・削除しても索引を再構築する必要がない ので、検索できない期間がない。 デメリット: * OR検索はN回検索することと同義なので、ゆらぎの種類が増え ると遅くなる。データにもよるが、ORの単語が増える毎に数 10ms-数100ms増加。 (だったかしら。だれかベンチマークを。。。) 3. 検索対象の文書の索引を作るときにゆらぎすべてを索引に登 録し、検索時はそのまま検索 メリット: * 一回の検索でゆらぎを検出できるので高速。 * 検索時に前処理する必要がないので多少速い。 (前処理は全文検索にくらべるとかかる時間はとても短いので 多くの場合は誤差の範囲。) デメリット: * ゆらぎの種類を追加・削除するたびに索引を再構築する必要が あるので、検索できない期間がある。 たしか、Solrは1.と3.のアプローチです。 Groongaは1.と2.のアプローチです。一般的なゆらぎ(半角と全角 の違い)とかは1.で表現のゆらぎは2.です。 参考: http://groonga.org/ja/docs/reference/commands/select.html#query-expander で、Mroongaなんですが、Mroongaは今のところ1.だけです。個人的 には、Mroongaに2.の機能を追加するといいんじゃないかとは思う のですが、あまり必要そうだという声を聞かないので優先度が低い のが現状です。 ということで、アプリケーション側でMySQLにクエリーを投げる前 に検索語をパースして「アル・カポネ」または「アルカポネ」とい うのがあったら次のような検索語にするのはいかがでしょうか!? (アルカポネ OR アル・カポネ) Mroongaが↑相当の機能を提供したほうがよさそうな雰囲気を感じ 始めたら機能を追加するのはアリだと思います! -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ: http://www.clear-code.com/services/code-reader/