Kouhei Sutou
kou****@clear*****
2015年 12月 30日 (水) 23:34:23 JST
須藤です。 In <A1873****@mva*****> "[groonga-dev,03821] Re: rroonga / 複数キーワードによる検索" on Wed, 30 Dec 2015 13:22:17 +0900, Masatoshi SEKI <m_seki****@mva*****> wrote: >> records = documents.select do |record| >> conditions = [] >> begin >> conditions << record.content.match(query, :allow_column => false) >> rescue Groonga::SyntaxError >> p $! >> end >> conditions >> end > > おー。かっこいい!! よかったです! > snippetで使うキーワードはcondtionsから取り出せますか? conditionsからはとれませんが、違う方法でとれます。 recordsから検索に使った検索式オブジェクトが取り出せるのです が、そいつからsnippetオブジェクトを作れます。そいつには conditionsに入っているキーワードが設定されています。 snippet = records.expression.snippet([["<span class=\"keyword\">", "</span>"]]) とすると、このsnippetが作るスニペットではキーワードが <span class="keyword">keyword</span> となります。たぶん、HTML出力で使う場合は次のよう に:html_escape => trueを指定します。こうすれば、キーワードや 他の文のところにある<などをエスケープしてくれるのでHTML出力 に便利です。 snippet = records.expression.snippet([["<span class=\"keyword\">", "</span>"]]) snippetオブジェクトでスニペットを作るには snippet.execute(text) とします。配列が返ってきて、それぞれがスニペットになっていま す。 まとめるとこんな感じです。 snippet = records.expression.snippet([["<span class=\"keyword\">", "</span>"]], :html_escape => true) records.each do |record| puts(record.key) puts(snippet.execute(record.description)) end -- 須藤 功平 <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/readable-code-workshop.html