2014-01-10 17:18:52 -05:00
ICU Analysis for Elasticsearch
2011-12-05 06:31:59 -05:00
==================================
The ICU Analysis plugin integrates Lucene ICU module into elasticsearch, adding ICU relates analysis components.
2014-08-26 01:04:37 -04:00
In order to install the plugin, simply run:
2011-12-05 06:31:59 -05:00
2014-08-26 01:04:37 -04:00
```sh
2015-04-30 10:04:15 -04:00
bin/plugin install elasticsearch/elasticsearch-analysis-icu/2.4.3
2014-08-26 01:04:37 -04:00
```
2014-02-28 17:09:56 -05:00
2014-09-08 18:04:33 -04:00
You need to install a version matching your Elasticsearch version:
2011-12-05 06:31:59 -05:00
2014-08-26 01:04:37 -04:00
| elasticsearch | ICU Analysis Plugin | Docs |
|---------------|-----------------------|------------|
| master | Build from source | See below |
2015-04-30 09:56:07 -04:00
| es-1.x | Build from source | [2.6.0-SNAPSHOT ](https://github.com/elastic/elasticsearch-analysis-icu/tree/es-1.x/#version-260-snapshot-for-elasticsearch-1x ) |
| es-1.5 | 2.5.0 | [2.5.0 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v2.5.0/#version-250-for-elasticsearch-15 ) |
2015-04-30 10:04:15 -04:00
| es-1.4 | 2.4.3 | [2.4.3 ](https://github.com/elasticsearch/elasticsearch-analysis-icu/tree/v2.4.3/#version-243-for-elasticsearch-14 ) |
2015-04-30 09:56:07 -04:00
| < 1.4.5 | 2 . 4 . 2 | [2.4.2 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v2.4.2/#version-242-for-elasticsearch-14 ) |
| < 1.4.3 | 2 . 4 . 1 | [2.4.1 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v2.4.1/#version-241-for-elasticsearch-14 ) |
| es-1.3 | 2.3.0 | [2.3.0 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v2.3.0/#icu-analysis-for-elasticsearch ) |
| es-1.2 | 2.2.0 | [2.2.0 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v2.2.0/#icu-analysis-for-elasticsearch ) |
| es-1.1 | 2.1.0 | [2.1.0 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v2.1.0/#icu-analysis-for-elasticsearch ) |
| es-1.0 | 2.0.0 | [2.0.0 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v2.0.0/#icu-analysis-for-elasticsearch ) |
| es-0.90 | 1.13.0 | [1.13.0 ](https://github.com/elastic/elasticsearch-analysis-icu/tree/v1.13.0/#icu-analysis-for-elasticsearch ) |
2014-08-26 01:04:37 -04:00
To build a `SNAPSHOT` version, you need to build it with Maven:
```bash
mvn clean install
plugin --install analysis-icu \
--url file:target/releases/elasticsearch-analysis-icu-X.X.X-SNAPSHOT.zip
```
2014-03-26 11:42:14 -04:00
2011-12-13 08:27:47 -05:00
ICU Normalization
-----------------
2014-01-10 17:30:05 -05:00
Normalizes characters as explained [here ](http://userguide.icu-project.org/transforms/normalization ). It registers itself by default under `icu_normalizer` or `icuNormalizer` using the default settings. Allows for the name parameter to be provided which can include the following values: `nfc` , `nfkc` , and `nfkc_cf` . Here is a sample settings:
2011-12-13 08:27:47 -05:00
2014-05-28 09:24:39 -04:00
```js
{
"index" : {
"analysis" : {
"analyzer" : {
2014-11-05 16:25:33 -05:00
"normalized" : {
2014-05-28 09:24:39 -04:00
"tokenizer" : "keyword",
"filter" : ["icu_normalizer"]
2011-12-13 08:27:47 -05:00
}
}
}
}
2014-05-28 09:24:39 -04:00
}
```
2011-12-13 08:27:47 -05:00
ICU Folding
-----------
2013-05-09 06:41:05 -04:00
Folding of unicode characters based on `UTR#30` . It registers itself under `icu_folding` and `icuFolding` names. Sample setting:
2011-12-13 08:27:47 -05:00
2014-05-28 09:24:39 -04:00
```js
{
"index" : {
"analysis" : {
"analyzer" : {
2014-11-05 16:25:33 -05:00
"folded" : {
2014-05-28 09:24:39 -04:00
"tokenizer" : "keyword",
"filter" : ["icu_folding"]
2011-12-13 08:27:47 -05:00
}
}
}
}
2014-05-28 09:24:39 -04:00
}
```
2011-12-13 08:27:47 -05:00
2013-10-05 10:29:40 -04:00
ICU Filtering
-------------
2014-01-10 17:30:05 -05:00
The folding can be filtered by a set of unicode characters with the parameter `unicodeSetFilter` . This is useful for a
non-internationalized search engine where retaining a set of national characters which are primary letters in a specific
language is wanted. See syntax for the UnicodeSet [here ](http://icu-project.org/apiref/icu4j/com/ibm/icu/text/UnicodeSet.html ).
2013-10-05 10:29:40 -04:00
The Following example exempts Swedish characters from the folding. Note that the filtered characters are NOT lowercased which is why we add that filter below.
2014-05-28 09:24:39 -04:00
```js
{
"index" : {
"analysis" : {
"analyzer" : {
"folding" : {
"tokenizer" : "standard",
"filter" : ["my_icu_folding", "lowercase"]
2013-10-05 10:29:40 -04:00
}
2014-05-28 09:24:39 -04:00
}
"filter" : {
"my_icu_folding" : {
"type" : "icu_folding"
"unicodeSetFilter" : "[^åäöÅÄÖ]"
2013-10-05 10:29:40 -04:00
}
}
}
}
2014-05-28 09:24:39 -04:00
}
```
2013-10-05 10:29:40 -04:00
2014-11-06 03:11:20 -05:00
ICU Collation
-------------
Uses collation token filter. Allows to either specify the rules for collation
(defined [here ](http://www.icu-project.org/userguide/Collate_Customization.html )) using the `rules` parameter
(can point to a location or expressed in the settings, location can be relative to config location), or using the
`language` parameter (further specialized by country and variant). By default registers under `icu_collation` or
`icuCollation` and uses the default locale.
Here is a sample settings:
```js
{
"index" : {
"analysis" : {
"analyzer" : {
"collation" : {
"tokenizer" : "keyword",
"filter" : ["icu_collation"]
}
}
}
}
}
```
And here is a sample of custom collation:
```js
{
"index" : {
"analysis" : {
"analyzer" : {
"collation" : {
"tokenizer" : "keyword",
"filter" : ["myCollator"]
}
},
"filter" : {
"myCollator" : {
"type" : "icu_collation",
"language" : "en"
}
}
}
}
}
```
Optional options:
* `strength` - The strength property determines the minimum level of difference considered significant during comparison.
The default strength for the Collator is `tertiary` , unless specified otherwise by the locale used to create the Collator.
Possible values: `primary` , `secondary` , `tertiary` , `quaternary` or `identical` .
See [ICU Collation ](http://icu-project.org/apiref/icu4j/com/ibm/icu/text/Collator.html ) documentation for a more detailed
explanation for the specific values.
* `decomposition` - Possible values: `no` or `canonical` . Defaults to `no` . Setting this decomposition property with
`canonical` allows the Collator to handle un-normalized text properly, producing the same results as if the text were
normalized. If `no` is set, it is the user's responsibility to insure that all text is already in the appropriate form
before a comparison or before getting a CollationKey. Adjusting decomposition mode allows the user to select between
faster and more complete collation behavior. Since a great many of the world's languages do not require text
normalization, most locales set `no` as the default decomposition mode.
Expert options:
* `alternate` - Possible values: `shifted` or `non-ignorable` . Sets the alternate handling for strength `quaternary`
to be either shifted or non-ignorable. What boils down to ignoring punctuation and whitespace.
* `caseLevel` - Possible values: `true` or `false` . Default is `false` . Whether case level sorting is required. When
strength is set to `primary` this will ignore accent differences.
* `caseFirst` - Possible values: `lower` or `upper` . Useful to control which case is sorted first when case is not ignored
for strength `tertiary` .
* `numeric` - Possible values: `true` or `false` . Whether digits are sorted according to numeric representation. For
example the value `egg-9` is sorted before the value `egg-21` . Defaults to `false` .
* `variableTop` - Single character or contraction. Controls what is variable for `alternate` .
* `hiraganaQuaternaryMode` - Possible values: `true` or `false` . Defaults to `false` . Distinguishing between Katakana
and Hiragana characters in `quaternary` strength .
2011-12-13 08:27:47 -05:00
ICU Tokenizer
-------------
2014-01-10 17:30:05 -05:00
Breaks text into words according to [UAX #29: Unicode Text Segmentation ](http://www.unicode.org/reports/tr29/ ).
2011-12-13 08:27:47 -05:00
2014-05-28 09:24:39 -04:00
```js
{
"index" : {
"analysis" : {
"analyzer" : {
2014-11-05 16:25:33 -05:00
"tokenized" : {
2014-05-28 09:24:39 -04:00
"tokenizer" : "icu_tokenizer",
2011-12-13 08:27:47 -05:00
}
}
}
}
2014-05-28 09:24:39 -04:00
}
```
2011-12-13 08:27:47 -05:00
2012-06-10 15:55:08 -04:00
2014-05-28 09:46:59 -04:00
ICU Normalization CharFilter
-----------------
Normalizes characters as explained [here ](http://userguide.icu-project.org/transforms/normalization ).
It registers itself by default under `icu_normalizer` or `icuNormalizer` using the default settings.
Allows for the name parameter to be provided which can include the following values: `nfc` , `nfkc` , and `nfkc_cf` .
Allows for the mode parameter to be provided which can include the following values: `compose` and `decompose` .
Use `decompose` with `nfc` or `nfkc` , to get `nfd` or `nfkd` , respectively.
Here is a sample settings:
```js
{
"index" : {
"analysis" : {
"analyzer" : {
2014-11-05 16:25:33 -05:00
"normalized" : {
2014-05-28 09:46:59 -04:00
"tokenizer" : "keyword",
"char_filter" : ["icu_normalizer"]
}
}
}
}
}
```
2012-06-10 15:55:08 -04:00
License
-------
This software is licensed under the Apache 2 license, quoted below.
2014-01-10 17:18:52 -05:00
Copyright 2009-2014 Elasticsearch < http: / / www . elasticsearch . org >
2012-06-10 15:55:08 -04:00
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.