Release 5.0.6 - 2015-07-29


  • [Ubuntu] Dropped Ubuntu 14.10 (Utopic Unicorn) support. It had been End of Life on July 23, 2015.

  • Supported offline index construction for reference vector. For example, load data before column_create an index:

    table_create Entries TABLE_NO_KEY
    column_create Entries numbers COLUMN_VECTOR Int32
    load --table Entries
    [[18, 19, 20]],
    [[100, 200]]
    table_create Numbers TABLE_PAT_KEY Int32
    column_create Numbers entries_numbers COLUMN_INDEX Entries numbers
    select Numbers --output_columns _key
  • Supported 'vector_text_column @ "element"' without index. For example, the select command in the following commands:

    table_create Memos TABLE_NO_KEY
    column_create Memos tags COLUMN_VECTOR Text
    load --table Memos
    {"tags": ["Groonga", "Rroonga", "Mroonga"]}
    select Memos --filter 'tags @ "Rroonga"'
  • Supported 'fixed_size_type_vector_column @ n' without index. For example, the select command in the following commands:

    table_create Memos TABLE_NO_KEY
    column_create Memos numbers COLUMN_VECTOR Int32
    load --table Memos
    {"numbers": [1, 2, 3]}
    select Memos --filter 'numbers @ 2'
  • [CentOS][Server packages][groonga-httpd] Show exit status. [GitHub#357] [Patch by jacob16bit]

  • [Windows][groonga executable file] Supported --pid-path.

  • [Windows] Allowed to delete file that is opened by other process.

  • Accepted selector only proc. Note that the proc can't be used as function. It means that the proc can't be used with sequential search.

  • Supported function call with complex argument. An example complex argument is Table["key"].column. For example:

    function(_key, Table["key"].column)
  • [doc][Tutorial] Added more description about database creation fails if DB_PATH points to an existing file. [GitHub#354] [Suggested by Hirotaka Takayama]

  • [doc][Tutorial] Described JSON formatting tools. [GitHub#355] [Suggested by tiwawan]

  • [experimental] Added an API to get/set the number of threads. It's a experimental API.

  • [experimental][thread_count] Added a command that get/set the number of threads. It's a experimental command.

  • [experimental][groonga executable file] Supported changing the number of threads by thread_count command. It's a experimental feature.

  • [experimental][Windows] Added Windows event log support. It's a experimental feature.

  • [experimental][groonga executable file] Added Windows event log related option --use-windows-event-log. It reports logs as Windows events. It's a experimental feature.

  • [Windows] Used Groonga's default encoding for log message.

  • Log used indexes in INFO level. The default level NOTICE. So the logs aren't showed by default.

  • [API] Added grn_log_level_to_string() and grn_log_level_parse().

  • [groonga executable file] Accepted log level name (e.g. info, debug and so on) for --log-level value.

  • [log_level][log_put] Accepted log level name for --level argument.

  • [plugin] Added grn_command_input_get_arguments().

  • Updated sharding plugins.

  • Added mruby APIs.

    • [mrb] Added Accessor#name.
    • [mrb] Added Column#[].
    • [mrb] Added Column#scalar?, Column#vector? and Column#index?.
    • [mrb] Added Context#command_version and Context#command_version= (accessors).
    • [mrb] Added Context#with_command_version.
    • [mrb] Added Database#each_name.
    • [mrb] Added Groonga::Cache.current.
    • [mrb] Added Record.
    • [mrb] Added Table#each.
    • [mrb] Added TableCursor#key.
    • [mrb] Binded grn_command_input_get_arguments() to CommandInput#arguments.
    • [mrb] Binded grn_table_group() to Table#group.
    • [mrb] Binded grn_table_group_flags() to TableGroupFlags.
    • [mrb] Binded grn_cache.
    • [mrb][estimate_size] Supported (... || ...) && (... || ...) as expression case.
    • [mrb] Supported query log.


  • Fixed a memory leak when an error is occurred in grn_expr_exec(). For example, unsupported operator (e.g. GRN_OP_TERM_EXTRACT) is used (not implemented operator assigned is occurred for the case).

  • [bindings/php] Added a missing check for a memory allocation failure. [Reported by Bill Parker]

  • [CentOS][Server packages][logrotate] Fixed syntax error in script.

  • [CentOS][Server packages][logrotate] Fixed wrong daemon running check.

  • [CentOS][Server packages][logrotate] Stop to set owner/group to log files. Because it's not consistent. groonga-httpd creates log files with root owner/group. But logrotated log files are created with groonga owner/group. [GitHub#358] [Reported by jacob16bit]

  • [groonga executable file] Fixed reported the maximum number of threads.

  • [groonga-httpd] Remove a needless space in log message:

    |n|  grn_fin (0) ->
    |n| grn_fin (0)
  • Fixed a bug that estimating size by regexp query with anchor (e.g. \\\\A in --filter 'comment @~ "\\\\Abc"') doesn't work. The feature is used in logical_range_filter.

  • [Request ID] Fixed a memory leak when request_id byte size >= 24.

  • [lock_clear] Fixed a typo in command name in Syntax section. [GitHub#363] [Reported by Christian Kakesa]

  • [sharding] Fixed wrong min include detection for month range type.


  • Bill Parker
  • jacob16bit
  • Hirotaka Takayama
  • tiwawan
  • Christian Kakesa

Release 5.0.5 - 2015-06-29


  • Show correct error information such as NoSuchFileOrDirectory when opening a database.

  • Don't set the default logger path for library use.

    • It's backward incompatible change. But it will not effect to many users.
    • Server use (groonga command, Mroonga, PGroonga and so on) users can get log by default. In server use, developers set up log in their software.
    • Most library use (Rroonga, groonga-gobject and so on) users couldn't get log by default with earlier versions. The default log path is system path such as /var/log/groonga/groonga.log. It's not writable for normal users.
  • [windows] Show error information when memory isn't enough on failing CreateFileMapping().

  • [tokenize] Updated example to show new "force_prefix" value. This value is added since 5.0.4.

  • [windows] Show error information when disk has any problem (disk full and so on) on failing FlushViewOfFile().

  • [API] Added grn_obj_flush().

  • [API] Added grn_obj_flush_recursive().

  • [io_flush] Added. It flushes memory mapped data to disk. Usually memory data automatically flush by an OS, but you can explicitly flush with this command.

  • [mruby] Binded grn_obj_remove() to Object#remove.

  • [mruby] Binded grn_table_delete() and grn_table_delete_by_id() to Table#delete.

  • [logical_table_remove] Added.

  • [logical_select] Added. --filter is only supported for now.

  • [cmake] Supported embedded MeCab tokenizer.

  • [logical_count] Supported month and day mixed shards. In the same month, month shard must have earlier records rather than day shards in the same month. For example:

    XXX_201506   <- includes only 2015-06-01 and 2015-06-02 records
    XXX_20150603 <- includes only 2015-06-03 records
    XXX_20150604 <- includes only 2015-06-04 records


  • Fixed wrong macro to include netinet/in.h. [GitHub#348] [Reported by OBATA Akio]
  • [rpm][groonga-httpd] Fixed failing restart. [GitHub#351] [Patch by jacob16bit]


  • OBATA Akio
  • jacob16bit

Release 5.0.4 - 2015-05-29


  • [mruby] Changed to use inspect to show meaningful error message for error value.
  • [mruby] Supported Groonga::Bulk#inspect to inspect bulk content.
  • [mruby] Supported Bulk#value to extract the value of record from bulk content.
  • [mruby] Supported estimating size for reference_column == record_id in logical_range_filter. In above case, it can be searched more effectively.
  • [sub_filter] Supported index column as scope parameter.
  • [Script syntax] Described clearly about numerical value. [GitHub groonga/] [Suggested by Hiroyuki Sato]
  • [select] Supported accessing other table's record in filter. You can use --filter 'OTHER_TABLE[KEY].COLUMN' for example.
  • [select] Supported operator in table key. You can use --filter 'OTHER_TABLE["SOME STRING" + "ANOTHER STRING"].COLUMN'" for example.
  • [example] Used Ruby 2.0 or later API in script for converting dictionary data.
  • Changed to show error message about invalid type of keys about table.
  • [doc] Fixed link from to or about mailing list preference page. is marked as obsoleted because of branding issue since May 11, 2015.
  • [tokenize] Added force_prefix value to each token information. [Patch by Naoya Murakami]
  • Supported to search by shorter words such as 2 or less characters for TokenTrigram. [Patch by Naoya Murakami]
  • [deb] Added service file for Systemd into groonga-httpd and groonga-server-gqtp packages.
  • [select] Ignored --query when its value consists of only space characters. Space characters include full-width space (U+3000 IDEOGRAPHIC SPACE in Unicode). [Suggested by TomyGX]


  • Fixed a crash bug when empty key is specified for drilldown[label].keys.
  • Fixed a bug that the return value of grn_parse_query_flags is not properly checked. [GitHub#336] [Reported by Hiroaki Nakamura]
  • Fixed a build error on some BSD systems. They doesn't have -i option for sed.
  • Fixed a build error on Solaris. It is changed to initialize by sizeof(msghdr) in memset() because msg_control, msg_controllen and msg_flags doesn't exist on Solaris by default.
  • [Tokenizers] Fixed a typo. [GitHub#338] [Reported by Hiroyuki Sato]
  • [Output] Fixed markup. [GitHub groonga/] [Reported by Hiroyuki Sato]
  • Reduced getenv() in each grn_ii_cursor_set_min(). This fixes performance regression on Windows.
  • Fixed a build error on OpenBSD. [groonga-dev,03255] [Reported by fbnteqr]
  • [groonga-httpd] Fixed a bug that same message is logged.
  • Fixed a crash bug which is caused by double free memory.
  • Fixed a memory leak. It's occurred when --match_columns and --query are used for non indexed text field and text fields have a value that isn't bulk embeddable. Normally, 32byte over size text isn't bulk embeddable, so this bug doesn't affect to the case if only small text less than 32byte are stored.
  • [Tokenizers] [TokenRegexp] Fixed a bug that it can't be searched correctly when query contains characters which are treated as blank character. For example, the newline - "\n" is typical one.


  • Hiroaki Nakamura
  • Hiroyuki Sato
  • Naoya Murakami
  • fbnteqr
  • TomyGX

Release 5.0.3 - 2015-04-29


  • [Tokenizers][Regular expression] Skip the last one character token.
  • [mruby] Supported regexp pattern for estimating size.
  • [mruby] Supported size estimation for accessor.
  • [logical_range_filter] Removed GRN_LOGICAL_RANGE_FILTER_ENABLED environment variable which is introduced since Groonga 5.0.2. Use GRN_LOGICAL_RANGE_FILTER_THRESHOLD=0 to disable range index search feature.
  • [logical_range_filter] Supported negative limit and offset.
  • [Windows] Used Groonga Admin in package.
  • [logical_range_filter] Changed threshold meaning:
    • threshold <= 0.0: always use range index
    • threshold >= 1.0: never use range index
  • [dump] Supported plugin.
  • [dump] Added the following options:
    • --dump_plugins [yes(default)/no]
    • --dump_schema [yes(default)/no]
    • --dump_records [yes(default)/no]
    • --dump_indexes [yes(default)/no]
  • [API] Added grn_plugin_get_ruby_suffix().
  • [dump] Fixed order to put index columns after reference columns because index column may refer reference columns.
  • [dump] Don't dump records of lexicon.
  • [dump] Show _id for TABLE_NO_KEY again.
  • [dump] Used offline index construnction.
  • Increased max hash key size from 4KiB (4096Byte) to 64KiB - 1 (65535Byte).
  • Increased max cache key size from 4KiB (4096Byte) to 64KiB - 1 (65535Byte).
  • Improved performance for nested index search.
  • Used index for nonexistent reference column value.
  • [experimental] Added plugin functions/vector. It includes vector_size function.
  • [Windows] Updated Visual Studio version [GitHub groonga/meetup#4] [Reported by Hiroyuki Mizuhara]
  • [cache_limit] Expired old caches when the max N caches is decreased. [Suggested by Gurunavi, Inc.]
  • Show more information such as errno for errors.
  • [windows] Used secure functions on Windows.
  • Added the following APIs to change log rotate threshold in file size.
    • grn_default_logger_set_rotate_threshold_size()
    • grn_default_logger_get_rotate_threshold_size()
    • grn_default_query_logger_set_rotate_threshold_size()
    • grn_default_query_logger_get_rotate_threshold_size()
  • [experimental] Supported log rotation. The feature is disabled by default. You can enable log rotation by the following options:
    • --log-rotate-threshold-size
    • --query-log-rotate-threshold-size
  • [GQTP] Documented about GQTP server.
  • [groonga executable file] Documented groonga executable file partially.
  • Supported Ubuntu 15.04 (Vivid Vervet).
  • Supported Debian 8.0 (Jessie).
  • [groonga-httpd] Updated bundled nginx version to the latest mainline (1.8.0).


  • [windows] Fixed a bug that Offline index construction is failed for large data (at least 1GB or larger) with Groonga built by Microsoft Visual C++. [Reported by Hideki ARAI]
  • [mruby] Made \\ index searchable in regular expression.
  • Fixed a bug that GRN_II_CURSOR_SET_MIN_ENABLE=yes doesn't return some matched records.
  • [sharding] Fixed a bug that partial range is handled as all range.
  • [logical_range_filter] Fixed a bug that :order => "descending" doesn't work.
  • [logical_count] Re-supported counting with range index.
  • Fixed a bug causing malfunction of grn_pat_del() and added a test for invalid patricia trie node add case. [groonga-dev,03177] [Reported by yuya sako]


  • Hideki ARAI
  • Hiroyuki Mizuhara
  • Gurunavi, Inc.
  • yuya sako

Release 5.0.2 - 2015-03-31

It's a bug fix release of 5.0.1.


  • Supported MessagePack 1.0.1. [Reported by Hiroshi Hatake]
  • [logical_range_filter] Disabled range index by default. It's enabled when you set the enviromnent variable GRN_LOGICAL_RANGE_FILTER_ENABLED to yes.


  • Fixed a regression bug that JSONP doesn't work. It was introduced in Groonga 4.1.1.
  • [windows] Fixed a bug that crash on x86 for Groonga 5.0.1. [groonga-dev,03131] [Reported by Atsushi Shinoda]
  • Fixed a crash bug that libedit is not properly initialized. The problem is fixed in the environment such as CentOS 7.


  • Atsushi Shinoda
  • Hiroshi Hatake

Release 5.0.1 - 2015-03-29


  • [logical_range_filter] Supported filter and sort.

  • Supported range search by multiple column index.

  • Added API Overview document for users who want to use Groonga as library.

  • [incompatible] Changed internal type of _score to floating point number from 32bit integer number. This is incompatible change for DB API users. This isn't incompatible change for query API users. It means that users who just use select aren't affected. Use the following code that works with both older and newer Groonga:

    grn_obj *score;
    double score_value;
    if (score->header.domain == GRN_DB_FLOAT) {
      score_value = GRN_FLOAT_VALUE(score);
    } else {
      score_value = (double)GRN_INT32_VALUE_FLOAT_VALUE(score);
  • [select] Added more strict check for invalid drilldown parameter.

  • Added grn_ctx_get_all_tables(). [Suggested by Masatoshi Teruya]

  • Supported to customize score function. See Scorer for details.

  • [incompatible] Custom score function feature introduced API and ABI incompatibilities in DB API layer. If you're using grn_search_optarg, please check that your code initializes your grn_search_optarg by 0 like the following:

    grn_search_optarg options;
    memset(&options, 0, sizeof(grn_search_optarg));

    If your code do the above thing, your code is API compatible and ABI incompatible. You just need to rebuild your code without modification.

    If your code doesn't the above thing, you need to added the above thing to your code.

  • Added the following predicates that check grn_obj type to DB API:

    • grn_obj_is_table()
    • grn_obj_is_proc_proc()
    • grn_obj_is_function_proc()
    • grn_obj_is_selector_proc()
    • grn_obj_is_scorer_proc()
  • [experimental] Supported skipping posting list when searching popular term and rare term at the same time. It will improve performance. Set GRN_II_CURSOR_SET_MIN_ENABLE environment variable to 1 to enable the feature. The feature is disabled by default.

  • [doc] Added in_values document.

  • [doc] Added logical_count document.

  • [mruby] Implemented custom #inspect method. Is is useful for debugging.

  • Added scorer_tf_at_most scorer. It limits not to exceed specified score regardless of term frequency.

  • [mruby] Supported estimating matched records for selecting index search or sequential search.

  • Added the following functions to estimate size by index:

    • grn_expr_estimate_size()
    • grn_ii_estimate_size_for_query()
    • grn_ii_estimate_size_for_lexicon_cursor()
  • Added missing NormalizerAuto availability check. [GitHub#283] [Reported by Tasuku SUENAGA]

  • Dropped Visual Studio 2010 support.

  • [experimental][mecab] Supported chunked tokenization. This feature is a workaround for MeCab's "too long sentense" error. Specify yes to GRN_MECAB_CHUNKED_TOKENIZE_ENABLED environment variable to enable it. By this configuration, Groonga splits a long text (8192 bytes over text by default) into small chunks and passes each chunk to MeCab. By this process, the above error isn't occurred. Additionally, you can customize chunk threshold bytes by GRN_MECAB_CHUNK_SIZE_THRESHOLD environment variable. Note that ,, ., !, ?, U+3001 IDEOGRAPHIC COMMA, U+3002 IDEOGRAPHIC FULL STOP, U+FF01 FULLWIDTH EXCLAMATION MARK and U+FF1F FULLWIDTH QUESTION MARK are treated as chunk delimiter characters.

  • Supported --pid-file in server mode of groonga executable file.

  • [groonga-httpd] Supported graceful stop to clean Groonga. It doesn't terminate the open connections immediately.

  • [experimental] Supported regular expression. See Regular expression to know about how to use regular expression.

  • [experimental] Added plugin_unregister command.

  • [http][load] Added "," as chunk separator in POST data. It decreases internal buffer size and improves load time when POST data don't include any new line.

  • [doc] Added Tokenizers document.

  • Improved POSIX.2 compatibility by using . as bash's "source" command replacement. [GitHub#317] [Patch by Jun Kuriyama]

  • [windows] Changed to the default IO version 1. It reduces disk usage on Windows. [groonga-dev,03118] [Tested by ongaeshi]

  • [httpd] Updated bundled nginx version to the latest mainline (1.7.11).

  • Changed mime-type for TSV output to text/tab-separated-values from text/plain.

  • [TokenFilterStopWord] Supported Offline index construction. [GitHub#296] [Patch by Naoya Murakami]


  • Fixed not to use obsolete --address parameter in the default groonga.conf. --bind-address is used instead. [Groonga-talk] [Reported by Dewangga]
  • [truncate] Fixed a bug that TABLE_NO_KEY table can't be truncated.
  • [mecab] Reduced needless logs for "empty token" and "ignore empty token".
  • Fixed a bug that wrong section in index is used. It means that wrong search result is returned. If you satisfy all of the following conditions, this bug is occurred:
    • Multiple indexes are available.
    • The first defined index or the last defined index are multi-column indexes.
    • When both of the first defined index and the last defined index are multi-column indexes, source column orders are different in them.
  • Fixed a bug that passing Groonga command line to groonga executable file from shell command line style usage always returns 0 as exit code. For example, groonga DB_PATH nonexistent_command always returned 0 as exist code.
  • Fixed a bug that plugin path may be broken when two or more plugins registered. [Reported by Naoya Murakami]
  • Fixed a bug that Lexicon.index.source_column_name style in match_columns doesn't work when source column specified by source_column_name has two or more indexes. [Reported by Naoya Murakami]


  • Masatoshi Teruya
  • Tasuku SUENAGA
  • Dewangga
  • Jun Kuriyama
  • ongaeshi
  • Naoya Murakami

Release 5.0.0 - 2015-02-09

  • Bump version to 5.0.0!


  • [doc] Added Security about Script syntax.
  • [experimental] Added sharding plugin. Execute register sharding to enable this feature in advance, then use logical_count to select records.
  • [cmake] Supported embedded Groonga with Clang. It fixed compilation failure on FreeBSD 10.1. [MDEV-7293] [Reported by Bernard Spil]
  • Supported to customize plugins directory. Set GRN_PLUGINS_DIR environment variable.


  • Fixed build failure when system has an incompatible version of onigmo/oniguruma headers installed. [GitHub#276] [Patch by Akinori MUSHA]
  • Fixed time related build failure on MSVC [GitHub#237]


  • Akinori MUSHA
  • Bernard Spil

The old releases