# groonga - An open-source fulltext search engine and column store.

- 日本語

# News - 6.x

## Release 6.1.5 - 2017-01-23

This is a bug fix release of 6.1.4. 6.1.4 users should upgrade to 6.1.5.

### Improvements

- Supported binary operation against nonexistent reference column value. It's always false.
- [logical_select] Added sort_keys, drilldown_sort_keys and drilldowns[${LABEL}].sort_keys. sortby, drilldown_sortby and drilldowns[${LABEL}].sortby are deprecated.

### Fixes

- [select] Fixed a bug that index search may not return matched record.

## Release 6.1.4 - 2017-01-18

This is a bug fix release of 6.1.3. 6.1.3 users should upgrade to 6.1.4.

### Improvements

- [Near search operator] Supported customizing the max interval.
- [Near search operator] Supported unlimited interval.
- Stopped to install `groonga-httpd-restart` when `groonga-httpd` isn't installed. [GitHub#626] [Patch by OBATA Akio]
- Improved index update performance against non natural language text data such as multi column index data in Mroonga. [groonga-dev,04219] [Reported by Masanori Miyashita] [GitHub#617]
- [logical_select] Supported `drilldowns[LABEL]` form. `drilldown[LABEL]` form is deprecated.
- Supported using system Onigmo. [GitUub#628] [Patch by OBATA Akio]

### Fixes

- [truncate] Fixed a memory leak. It's caused when the target is TABLE_HASH_KEY or TABLE_PAT_KEY and the target table has many token filters are registered. [GitHub#622] [Patch by Naoya Murakami]
- [select] Fixed a bug that old cache is used after column_rename is used.
- [select] Fixed a bug that index search may not return matched record. [GitHub#624] [Patch by Naoya Murakami]

### Thanks

- Naoya Murakami
- OBATA Akio

## Release 6.1.3 - 2017-01-06

### Improvements

- [`grn_db_recover()`][grndb] Reduced memory usage when only 1 thread mode.

### Fixes

- Reverted "Improved performance of updating inverted indexes in the worst case". It had reported error when key has multibyte character. This change was included in 6.1.2.
- [TokenRegexp] Fixed a bug that \A${ONE_CHARACTER}\z returns all one character values.

## Release 6.1.2 - 2016-12-31

### Improvements

- windows: Supported to bundle groonga-normalizer-mysql.
- [Log] Added description about log format with `PID` case.
- [CentOS] Improved installation procedure about recent `groonga-release` package.
- [load] Supported to show `{"n_loaded_records": N}` in response for command version 3 or later.
- [load] Supported `--output_ids yes` parameter for command version 3 or later. If `--output_ids yes` is specified, loaded record IDs(`loaded_ids`) are also returned. ID is 0 for record that is failed to add.
- [Others] Added installation instruction about depended packages (Zstandard, LZ4)
- Changed to use Onigmo 6.0 as regular expression library.
- Marked some features as stable.
  - grndb command.
  - request_cancel command.
  - highlight_html function.
  - highlight_full function.
  - snippet_html function.
- [httpd] Updated bundled nginx to 1.11.8.
- Improved to reduce `AND` search response time. [GitHub#618,#619,#620] [Patch by Naoya Murakami]
- Improved performance of updating inverted indexes in the worst case. This fix also reduces memory usage in that process. [groonga-dev,04219] [Reported by Masanori Miyashita]

### Fixes

- Added missing `NULL` check about return value of `grn_ctx_at`. This fix prevents from unexpected crash bug.

### Thanks

- Naoya Murakami
- Masanori Miyashita

## Release 6.1.1 - 2016-11-29

### Improvements

- [select] Supported the following functions in slices.
  - between
  - geo_in_circle
  - geo_in_rectangle
  - in_values
  - fuzzy_search
  - query
- [groonga-httpd] Supported PID output to log file. It is useful to distinct multiple worker processes. The messages are logged as `TIMESTAMP|MARK|PID: MESSAGE`.
- [ja] Changed to stop compressing small data. If column data is less than 256 byte, the data aren't compressed even when `COMPRESS_ZLIB` or `COMPRESS_LZ4` or `COMPRESS_ZSTD` is specified. By this change, performance and space efficiency will be improved.
- [column_create] Supported Zstandard. `COMPRESS_ZSTD` flag is used to enable this feature.
- [rpm][centos] Enabled Zstandard for CentOS 6 or later packages.
- [between] Supported `between(_key, ...)` as target.
- [httpd] Updated bundled nginx to 1.11.6.

### Fixes

- Fixed a bug that needless index check reports error wrongly when the default column value such as 0 exists in lexicon. It shows error message such as "[ii][delete][one] failed to allocate a segment: ..." unexpectedly.
- [logical_table_remove] Fixed a bug that it may return error with `--dependent yes` option. In the previous version, if one or more columns that refer the same table, the error is occurred.
- [sort] Fixed a crash bug when one of sort keys is a compressed column and `--query` and/or `--filter` are used at the same time.

## Release 6.1.0 - 2016-10-29

### Improvements

- [dump] Supported to sort load table names by key instead of ID to make output stable. This is incompatible change but it makes easy to compare result of dump command.
- [table_create][column_create] Revised outdated descriptions with execution examples. English documentation is also published and section about small/medium index column is also added.
- [experimental][httpd] Supported mruby to customize configuration settings in groonga-httpd.conf.
- [windows] Updated bundled Groonga Admin to 0.9.5. It is recommended to upgrade because amount of memory usage is drastically reduced. Note that this version drops Groonga 5.0.8 or earlier support.
- Added log token and token ID on error. [Gitter:groonga/ja:58043f77614116a2568d529c] [Suggested by torinky]
- [Tables] Updated description about the max record ID.
- [mruby] Suppported to convert time of `mrb_value` to `grn_bulk`. [GitHub:#607] [Patch by Naoya Murakami]
- [ubuntu] Supported Ubuntu 16.10 (Yakkety Yak)
- [httpd] Updated bundled nginx to 1.11.5.

### Fixes

- Fixed a bug that table of index column was reported in log instead of correct index column.
- Fixed a bug that in posting list skip optimization in index search may skip to wrong position. [Gitter:groonga/ja:57f2ff87d45d7f0f525e2216] [Reported by torinky]
- Fixed a memory leak on static index construction.
- [hash] Fixed a memory leak for many token filters are set case.
- [select] Fixed a bug that wrong column name that starts with number in output_columns is not ignored. It caused a syntax error.

### Thanks

- torinky
- Naoya Murakami

## Release 6.0.9 - 2016-09-29

### Improvements

- [logical_table_remove] Supported to remove broken tables and columns. It supports `force` parameter.
- [select] Supported match_columns, query, query_flags and query_expander for slices.
- [http][httpd] Supported incomplete POST-ed JSON. Only passed JSON is processed.
- [httpd] Changed to stop not to create the default log file when custom file is specified.
- Changed to reduce the default lock timeout to 15min from 2.7h.
- [groonga-httpd] support "~" modifier in location such as "location ~ /d/...".
- [mruby] Updated to the latest mruby to fix build error with Visutal Studio.
- [httpd] Updated bundled nginx to 1.11.4.

### Fixes

- Fixed build error on OpenBSD. OpenBSD doesn't provide `TCP_NODELAY`. [MariaDB JIRA: fix MDEV-7209][Reported by Brad Smith]
- Fixed a missing deleted check for indexes. It causes missing search results even though it should be matched. Groonga 6.0.3 or later version are affected. [groonga-dev, 04107] [Reported by Kazuhiko]
- [doc] Fixed a missing entry in Groonga 6.0.2 news that sequential search is also executed as a fallback for geo_in_circle [Reported by Gurunavi, Inc.]
- [table_create] Fixed a bug that `table_create` command accepts no key type for `TABLE_PAT_KEY`, `TABLE_HASH_KEY` and `TABLE_DAT_KEY` tables. It creates a invalid table. [GitHub#599]
- [admin] Fixed a bug that it can not create a new record.
- Fixed a bug that select command with a wrong filter causes crash. [GitHub#601]

### Thanks

- Brad Smith
- Kazuhiko
- Gurunavi, Inc.

## Release 6.0.8 - 2016-08-29

### Improvements

- [object_list] Supported to show more properties such as `value_size` and `n_elements` in metadata.
- Supported operator per selector. This change enables to choose correct index for selector. It means that `between()` chooses index for range search, `in_values()` chooses index for equality comparison. [GitHub#589] [Reported by Naoya Murakami]
- [debian] Changed to use nginx log reopen feature instead of Groonga's [log_reopen] command because log_reopen command works only for one worker. On the contrast, nginx log reopen feature works for multiple workers.
- [table_copy] Added `table_copy` command which copies specified table.
- [column_copy] Supported to cast A table record to B table record. It fixes a case that `column_copy` failure in the previous version. Note that both tables must support key.
- [column_copy] Supported reference type vector.
- [admin] Supported no response error case. It fixes the problem that "Loading..." message will remain displayed.
- [groonga executable file][http] Supported to return 400 Bad Request against not implemented function.
- [groonga-httpd] Supported to return body on failure.
- [groonga-httpd] Supported to load large data as stream.
- Supported sequential search by `_key` when it is specified as a source of index column.
- Supported to report index information on resolving by accessor for data column if log level is equal to info.
- Added valid lexicon check on setting index sources. If users create wrong index for sources by [column_create], this check shows details.
- [Limitations] Updated description about table limitations.

### Fixes

- [column_create] Fixed a bug that buffer overflow occurs on logging.
- Fixed to output response even when critical level error.
- Fixed to ensure clearing output buffer for each grn_ctx_send. This change solves sometimes response may broken. [GitHub#330]
- [fuzzy_search] Fixed a bug that `prefix_match_size` option returns wrong node. It causes a problem that `fuzzy_search` returns wrong edit distance. [GitHub#590] [Patch by Naoya Murakami]
- [load] Changed to report error when column value set is failed. It enables you to notice mismatch between type of column and actual value.
- [groonga-httpd] Fixed a bug that wrong HTTP status is set on success.
- [fuzzy_search][in_values] Fixed to resolve record id correctly on sequential search. [GitHub#591,#592,#593] [Patch by Naoya Murakami]

### Thanks

- Naoya Murakami

## Release 6.0.7 - 2016-07-29

### Improvements

- [string_substring] Added `string_substring` function to extract a substring from given string. The syntax of `string_substring` is `string_substring(string, from, [length])`. [GitHub#564] [Patch by Naoya Murakami]
- [experimental] Added `GRN_II_MAX_N_SEGMENTS_TINY` and `GRN_II_MAX_N_CHUNKS_TINY` environment variables to customize the value about default max N segments/chunks. This feature is affected to index column for fixed size scalar column. It reduces memory usage but not tested widely yet.
- [vector_slice] Added `vector_slice` function to extract specific elements in vector column. [GitHub#582] [Patch by Naoya Murakami]
- Supported index range search for `_key` of PAT/DAT table. [GitHub#583]
- [object_list] Added `object_list` command for debugging. It is useful to investigate whether database is corrupted or not.
- Added a script that checks `object_list` response.
- [mruby] Supported float bulk in expression_rewriter. [GitHub#587] [Patch by Naoya Murakami]
- [dump] Changed output order about table by name instead of ID. It breaks dump output compatibility but it can be restored as usual.
- [windows] Updated bundled msgpack to 2.0.0.
- [windows] Added groonga-suggest-create-dataset.
- [httpd] Updated bundled nginx to 1.11.3.
- [deb] Dropped support for Ubuntu 15.10 (Wily werewolf).

### Fixes

- [examples edict] Fixed to use `gzcat` instead of `zcat` if exists. [GitHub#576] [Patch by Yuya TAMANO]
- Added missing null-check before dereferencing a pointer. [GitHub#579] [Patch by Sho Minagawa]
- Fixed not to perform a sequential search if an index is available. [GitHub#580]
- [load] Fixed a bug that `Time` column can reduce the precision of values. [GitHub#581]
- Fixed a bug that object literal expression codes is broken when executing multiple logical operations. [GitHub#584] [Patch by Naoya Murakami]
- Fixed a bug that columns of Float, WGS84GeoPoint and TokyoGeoPoint were created with `GRN_OBJ_COMPRESS_ZLIB` even if the flag was not specified. [GitHub#586] [Reported by Naoya Murakami]

### Thanks

- Naoya Murakami
- Yuya TAMANO
- Sho Minagawa

## Release 6.0.5 - 2016-06-29

### Improvements

- [io_flush] Marked as stable command.
- [mruby] Supported to optimize prefix search by estimating data size efficiently
- [fuzzy_search] Supported `max_distance` option as 3rd argument to specify it easily. [GitHub#553] [Patch by Naoya Murakami]
- [query_expand] Supported command to expand query. It is useful if there are many synonyms.
- [select] Supported `--drilldown` with `command_version=3`. [groonga-dev,04055] [Reported by Naoya Murakami]
- Removed needless code from `grn_table_select_sequential()`. [GitHub#560] [Reported by Sho Minagawa]
- grn_table_setoperation(): Changed to update score instead of overwriting by `GRN_OP_ADJUST`. This change is introduced to keep consistency with `grn_ii_posting_add()`. [groonga-dev,04058] [Reported by Naoya Murakami]
- [dump] Reduced the max opened table/column files when 1 thread mode.

### Fixes

- [CMake][Windows] Fixed to install missing mruby script. [groonga-dev,04040] [Reported by Soichiro Kiyokawa]
- [Windows] Changed to bundle msgpack-c.
- [Others] Fixed a typo about default database encoding (utf8). [GitHub#549] [Patch by IWAI, Masaharu]
- [ユーザーと協力して開発をうまく進めていくための指針] Fixed a typo about product name (Twitter). [GitHub#550] [Patch by IWAI, Masaharu]
- Fixed a bug that specific records are not included into search result when multiple index column is created with `WITH_SECTION` flag. [GitHub#551]
- Fixed a crash bug that searching while loading data with `GRN_II_CURSOR_SET_MIN_ENABLE=yes`. `GRN_II_CURSOR_SET_MIN_ENABLE` is enabled by default since Groonga 6.0.3.
- [Token filters] Fixed thread unsafe implementation.
- [doc] Fixed a typo in 6.0.4 release entry. [GitHub#559] [Patch by cafedomancer]

### Thanks

- Naoya Murakami
- Soichiro Kiyokawa
- IWAI, Masaharu
- cafedomancer

## Release 6.0.4 - 2016-06-06

It's a bug fix release of 6.0.3. It's recommend that Groonga 6.0.3 users upgrade to 6.0.4. This release fixes some search related problems.

### Fixes

- [select] Fixed a bug that `--drilldown` against a temporary column created by `--columns` refers freed memory.
- Fixed a bug that search with large index may refer invalid data. It takes a long time to return search result. [GitHub#548][groonga-dev,04028][Reported by Atsushi Shinoda]

### Thanks

- Atsushi Shinoda

## Release 6.0.3 - 2016-05-29

### Improvements

- [experimental] Added `GRN_II_OVERLAP_TOKEN_SKIP_ENABLE` and `GRN_NGRAM_TOKENIZER_REMOVE_BLANK_DISABLE` environment variables to improve performance of N-gram tokenizer. [GitHub#533][Patch by Naoya Murakami]

- [table_create] Stopped to ignore nonexistent default tokenizer, normalizer or token filters. In the previous versions, Groonga ignored a typo in `--default_tokenizer`, `--normalizer` or `--token_filters` parameter silently. It caused a delay in finding problems.

- [select] output_columns v1: Supported expression such as `snippet_html(...)` in output_columns.

- [select] Removed a limitation about the number of labeled drilldowns. In the previous versions, the number of max labeled drilldowns is limited to 10.

- [number_classify] Added a number plugin. Use `number_classify` function to classify by value.

- Added a time plugin. Use `time_classify_second`, `time_classify_minute`, `time_classify_hour`, `time_classify_day`, `time_classify_week`, `time_classify_month`, `time_classify_year` function to classify by value.

- [select] Supported dynamic column. Dynamic columns can be used in `output_columns`, `drilldown` and `sortby` [GitHub#539,#541,#542,#544,#545][Patch by Naoya Murakami]:

      select \
        --columns[LABEL].stage filtered \
        --columns[LABEL].type ShortText \
        --columns[LABEL].flags COLUMN_SCALAR \
        --columns[LABEL].value 'script syntax expression' \
        ...

- [experimental][select] Improved performance for range/equal search and enough filtered case. Set `GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO` environment variable to enable this feature.

- [select] Supported index used search for filtered tables.

- Supported to detect changed database isn't closed. This feature is useful to check database corruption when Groonga is crashed unexpectedly.

- [grndb] Supported detecting database wasn't closed successfully case.

- Added `--drilldown_filter`.

- Supported `filter` in labeled drilldown.

- Improved performance for using [between] without index. By between() optimization, there is a case that range search is 100x faster than the previous version of between().

- [record_number] Supported window function.

- [experimental][select] Supported `--slices`.

- [select] Deprecated `--sortby` and `--drilldown_sortby`. Use `--sort_keys` and `-drilldown_sort_keys` instead.

- [select] Deprecated `--drilldown[...]`. Use `--drilldowns[...]` instead.

- Added [Command version] 3. It uses object literal based envelope.

- [groonga-httpd] Updated bundled nginx version to 1.11.0.

### Fixes

- [select] output_columns v2: Fixed a bug that `*` isn't expand to columns correctly.
- Fixed a bug that 1usec information is lost for time value.
- Fixed a crash bug when a mruby plugin is initialized with multiple threads.
- Fixed a bug that static indexing crashes if a posting list is very long. This bug may occur against enormous size of database. [GitHub#546]

### Thanks

- Naoya Murakami

## Release 6.0.2 - 2016-04-29

### Improvements

- Supported bool in comparison operators (`>`, `>=`, `<`, `<=`). TRUE is casted to 1. FALSE is casted to 0. Thus you specify function which returns boolean value in comparison.
- [groonga-http][Request timeout] Supported `request_timeout` parameter. Canceled request returns `HTTP/1.1 408 Request Timeout` status code.
- [table_tokenize] Added `index_column` option. [GitHub#534] [Patch by Naoya Murakami]
- [table_tokenize] Supported to output `estimated_size`. [GitHub#518] [Patch by Naoya Murakami]
- [geo_in_rectangle][geo_in_circle] Supported to work without index. In this case, sequential search is executed as a fallback.
- Reduced needless internal loops. It improves phrase search performance. [GitHub#519] [Patch by Naoya Murakami]
- [How to contribute to groonga] Updated documentation about contribution. [GitHub#522] [Patch by Hiroshi Ohkubo]
- [Return code] Updated documentation about return code list.
- [groonga executable file] Added `--default-request-timeout` option.
- [windows] Supported DLL version.
- Supported index used search even if value only term exists. For example, `true || column > 0` doesn't use index even if `column` has index. In this release, above issue is resolved.
- [select] Supported specifying grouped table [GitHub#524,#526,#527,#528,#529] [Patch by Naoya Murakami]
- Supported grouping by `Int{8,16,64}/UInt{8,16,64}` value. In the previous versions, only 32bit fixed size value was supported.
- Added table name to error message for invalid sort key.
- [groonga-suggest-httpd] Updated documentation.
- [Completion] Fixed a typo about example. [groonga-dev,04008] [Reported by Tachikawa Hiroaki]
- [grndb] Added a workaround to keep backward compatibility. use `object_inspect` instead of `inspect`.
- [groonga-httpd] Updated bundled nginx version to 1.9.15.
- [centos] Supported systemd.
- [doc] Supported only HTML output. [GitHub#532] [Patch by Hiroshi Ohkubo]
- [groonga-httpd][centos] Supported to customize environment variables.
- [Others] Updated documentation about `--with-package-platorm` option.
- [ubuntu] Supported Ubuntu 16.04 (Xenial Xerus)

### Fixes

- Fixed a bug that tokenization of zero-length values are failed. For example, if `description` column is indexed column, tokenizer reports an error. [GitHub#508] [Reported by Naoya Murakami]:

      load --table docs
      [
      ["_key","description"],
      [2,""]
      ]

- Fixed a crash bug because of invalid critical section handling. [GitHub#507]

- [リリース手順] Fixed a typo about grntest howto. [GitHub#511] [Patch by Hiroshi Ohkubo]

- [doc] Removed man support.

- Removed invalid debug log messages which make user confused.

- Fixed a bug that data is not correctly flushed because internal counter is wrongly cleared. In the previous version, when size of data exceeds specific one, it was failed to create indexes. [GitHub#517] [Reported by Naoya Murakami]

- Fixed a bug that a process can't use more than one caches in parallel. [GitHub#515]

- Fixed a bug that internally used `alloc_info` structure which is used to find memory leaks is not exclusively accessed. Without this fix, it may causes a crash. [GitHub#523]

- [tokenizer mecab] Fixed a memory leak on dictionary encoding mismatch error. [groonga-dev,04012] [Reported by Naoya Murakami]

- Fixed a bug that combination of [groonga-suggest-httpd] and [groonga-suggest-learner] didn't work.

- [doc] Removed needless uuid from *.po [GitHub#531] [Patch by Hiroshi Ohkubo]

- [highlight_html] Fixed a bug that duplicated text is returned. This bug occurs when highlighted keyword occurred 1024 or more times.

- Fixed a bug that `KEY_LARGE` conflicts with existing flag. If you use `TABLE_HASH_KEY|KEY_LARGE` in the previous version, there is a possibility to break database. Please recreate the table.

### Thanks

- Naoya Murakami
- Hiroshi Ohkubo
- Tachikawa Hiroaki

## Release 6.0.1 - 2016-03-29

### Improvements

- [mruby] Updated bundled mruby to fix a crash bug related to GC and backtrace.

- Exported the following API

  - grn_expr_take_obj()
  - grn_request_canceler_cancel_all()
  - grn_obj_remove_dependent()
  - grn_obj_is_text_family_type()

- [hash] Supported 4GiB over total key size when `KEY_LARGE` flag is set to a table:

      table_create Users TABLE_HASH_KEY|KEY_LARGE ShortText

- [load] Supported Request ID when you specify input data as raw JSON instead of parameter value:

      POST /d/load?table=XXX&request_id=x

      load --table XXX --request_id x
      [
        ...
      ]

- [shutdown] Added `mode` argument to shutdown immediately. Use `shutdown --mode immediate` in such a purpose.

- [Mac OS X] Added a instruction to setup MeCab dictionary for Homebrew.

- [load] Supported to stop load when cancel is requested.

- [table_remove] Supported to remove dependent tables. Use `--dependent yes` for it.

- [logical_table_remove] Supported to remove dependent tables.

- [Windows] Supported memory debug mode on Windows.

- Supported to dump allocation information by status on memory debug mode

- [I18N] Added installation step for Sphinx.

- [experimental] Supported to split chunks in static indexing. Use `GRN_INDEX_CHUNK_SPLIT_ENABLE=yes` to enable it. [GitHub#479]

### Fixes

- [load] Fixed a crash bug when nonexistent column is specified. [GitHub#493]
- [load] Fixed a bug that load command does not return error code correctly. [GitHub#495]
- [load] Fixed a memory leak when parsing columns parameter in load command.
- [load] Fixed a bug that only the first array in `--values` is handled as a list of column names if `--columns` is not specified. [GitHub#497]
- [load] Fixed to check `--columns` more precisely [GitHub#496]
- Fixed a insufficient critical section handling for thread-safety.
- [column_create] Fixed a crash bug when failed to create a column.
- [table_remove] Fixed a crash bug to remove nonexistent table. [GitHub#504]
- Fixed a bug that offline index construction against `WITH_POSITION` + non-text `VECTOR` column ignores position.
- [grndb] Fixed a bug that cycle reference causes stack over flow.
- [deb] Dropped support for Ubuntu 15.04 (Vivid Vervet)

### Thanks

- YUKI Hiroshi

## Release 6.0.0 - 2016-02-29

### Improvements

- [grndb] Supported check against table specified as table domain in `--target` mode.

- [`grn_pat_fuzzy_search()`] Added a new API that provides fuzzy search feature by patricia trie. [GitHub#460][Patch by Naoya Murakami]

- [`functions/string`] Added a new plugin that provides string related functions. [GitHub#459][Patch by Naoya Murakami]

- [`string_length()`] Added a new function that returns the number of characters in the specified string. It's contained in `functions/string` plugin. [GitHub#459][Patch by Naoya Murakami]

- [`grn_table_fuzzy_search()`] Added a new DB API that provides fuzzy search feature. [GitHub#463][Patch by Naoya Murakami]

- [`GRN_OP_FUZZY`] Added a new operator. [GitHub#463][Patch by Naoya Murakami]

- [`grn_obj_search()`] Supported `GRN_OP_FUZZY` operator. [GitHub#463][Patch by Naoya Murakami]

- [`GRN_TABLE_FUZZY_SEARCH_WITH_TRANSPOSITION`] Added a flag for `grn_table_fuzzy_search()`. [GitHub#463][Patch by Naoya Murakami]

- [`GRN_TOKENIZE_ONLY`] Added a new tokenization mode that returns all tokens even if the token doesn't exist in lexicon. [GitHub#463][Patch by Naoya Murakami]

- [`grn_obj_type_to_string()`] Add a new function that stringify type ID such as `GRN_VOID` and `GRN_BULK`.

- [object_inspect] Added a new command that returns information of the target object.

- Supported compare operations against vector. If left hand side vector includes any element that satisfies `left_hand_side_element OP right_hand_side`, it returns true.

  Example:

      [1, 2, 3] < 2 # -> true because 1 is less than 2
      [1, 2, 3] > 4 # -> false because all elements are less than 4

- [`fuzzy_search()`] Added a new function that provides fuzzy search feature. [GitHub#464][Patch by Naoya Murakami]

- [edit_distance] Supported transposition flag. [GitHub#464][Patch by Naoya Murakami]

- Supported index search for `vector_column[2] == 29`.

- [`GRN_PLUGIN_CALLOC()`] Added a new API for plugin that provides `calloc()` feature. [GitHub#472][Patch by Naoya Murakami]

- Supported index search for compare operations against vector element such as `vector_column[2] < 29`.

- [`grn_plugin_proc_get_var_bool()`] Add a new API for plugin that provides getting boolean argument value feature.

- [`grn_plugin_proc_get_var_int32()`] Add a new API for plugin that provides getting 32bit integer argument value feature.

- [`grn_plugin_proc_get_var_string()`] Add a new API for plugin that provides getting string argument value feature.

- [object_remove] Added a new command that removes an object. `object_remove` can also remove a broken object.

- Supported mips/mipsel. [debian-bugs:770243][Reported by Nobuhiro Iwamatsu][Reported by Thorsten Glaser][Reported by YunQiang Su][Reported by Dejan Latinovic][Reported by Steve Langasek]

- [grndb][CMake] Supported.

- [`grn_expr_syntax_expand_query()`] Added a new API that provides query expansion feature.

- [`snippet()`] Add a new function that provides snippet feature. [GitHub#481][Patch by Naoya Murakami]

- [`highlight()`] Add a new function that provides highlight feature. [GitHub#487][Patch by Naoya Murakami]

- Added `XXX && column != xxx` optimization. It's converted to `XXX &! column == xxx` internally.

- [Memcached binary protocol] Added `--memcached-column`. You can access existing column by memcached protocol.

- [groonga-httpd] Supported TLS. [groonga-dev,03948][Reported by KITAITI Makoto]

- [groonga-httpd] Updated bundled nginx version to 1.9.11 from 1.9.10.

- [Windows][CMake] Supported LZ4. LZ4 is bundled.

### Fixes

- [select] Added a missing error check for outputting column. [GitHub#332][Reported by Masafumi Yokoyama]
- Fixed a bug that `function(column_with_index) == 29` ignores `function()`. [groonga-dev,03884][Reported by Naoya Murakami]
- [reindex] Fixed a bug that `reindex` doesn't clear query cache.
- [patricia trie] Fixed a bug that sorting by integer patricia trie key returns unsorted result. [GitHub#476][Reported by Ryunosuke SATO]
- [select] Fixed a crash bug that is occurred when too many keywords is specified into `--query`. [GitHub#484][Reported by Hiroyuki Sato]
- [select] Fixed a bug that wrong cache is used when Command version or Pretty print is used. [GitHub#490][Reported by KITAITI Makoto]

### Thanks

- Masafumi Yokoyama
- Naoya Murakami
- Nobuhiro Iwamatsu
- Thorsten Glaser
- YunQiang Su
- Dejan Latinovic
- Steve Langasek
- Ryunosuke SATO
- Hiroyuki Sato
- KITAITI Makoto