BloGroonga

2014-08-29

Groonga 4.0.5リリース

今日は肉の日ですね!Groonga 4.0.5 をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

前回 は細かな改良・修正が主でしたが、今回は次のような大きめの機能拡張が入っています。

  • クエリー構文(selectの–queryで指定するときの書式) で近傍検索できるようになりました。ドキュメントはまだないので詳細を後述します。
  • 実験的ですが、キーワードハイライト用の関数を追加しました。(@naoa_yさん が開発。ドキュメントも書いてくれました!)
    • highlight_html(): 対象テキストの中にあるキーワードを <span class="keyword">...</span> で囲みます。どのようにハイライトするかはCSSで指定してください。通常はこの関数で十分です。
    • highlight_full(): highlight_html() よりいろいろオプションを指定できるバージョンです。上級ユーザー向けです。

また、次のような問題を修正しています。groonga-httpd を使っている方、1つの文書に同じトークンが大量に含まれる方はアップグレードをオススメします。

  • バンドルしているnginxを1.7.4に更新しました。セキュリティー関連の修正を含んでいます。
  • 1つの文書に同じトークンが大量に含まれている場合、インデックス構築時に無限ループが発生する問題を修正しました。

近傍検索

これまで、 スクリプト構文(selectの–filterで指定するときの書式)では近傍検索できた (スクリプト構文で近傍検索するときのドキュメントはあります)のですが、今回のリリースからクエリー構文( select--query で指定するときの書式)でもできるようになりました。

通常の検索ではキーワードが文書中のどこかに含まれていればヒットします。

例えば、次のクエリーを考えます。

--query '渋谷 ラーメン'

この場合は、「渋谷でラーメンを食べた。」もヒットしますし、「新宿でラーメンを食べた。その後、渋谷に行った。」もヒットします。

フレーズ検索ではキーワードが指定した順番に出現していればヒットします。

例えば、次のクエリーを考えます。このクエリーは「渋谷」、「で」、「ラーメン」が順番に出現すればヒットします。

--query '"渋谷 で ラーメン"'

この場合は、「渋谷でラーメンを食べた。」はヒットしますが、「渋谷で味噌ラーメンを食べた。」はヒットしません。「で」と「ラーメン」の間に「味噌」が入っているからです。

今回から --query でも指定できるようになった近傍検索は少し緩いフレーズ検索のような挙動になります。キーワードの出現した順番も大事ですが、キーワードの間にいくつか他のキーワードが入っていてもヒットします。

例えば、次のクエリーを考えます。このクエリーは「渋谷」、「ラーメン」が順番に出現すればヒットします。「渋谷」と「ラーメン」の間に10個までなら他のキーワードが入っていてもヒットします。

--query '*N"渋谷 ラーメン"'

この場合は、「渋谷でラーメンを食べた。」もヒットしますし、「渋谷で味噌ラーメンを食べた。」もヒットします。「渋谷でラーメン」は「渋谷」と「ラーメン」の間に「で」が入っていますが、間に入っているキーワードが1個なのでヒットします。「渋谷で味噌ラーメン」も「で」と「味噌」が入っていますが2個なのでヒットします。

間に何個別のキーワードを許容するかは N の後に指定します。

次の例は1個まで間にキーワードを許容します。「渋谷でラーメン」はヒットしますが、「渋谷で味噌ラーメン」はヒットしません。

--query "*N1"渋谷 ラーメン"'

公式ドキュメントには --query で使うときの説明はまだありませんが( --filter で使うときの説明はあります)、ぜひ試してみて自分のブログやQiitaなどに使い方をまとめてみてください!

イベントのお知らせ

来月は、次のGroonga関連イベントがあります。都合のつくGroongaユーザーのみなさんはぜひ参加してください!

さいごに

4.0.4からの詳細な変更点は 4.0.5リリース 2014/08/29 を確認してください。

それでは、Groongaでガンガン検索してください!