规范器
编辑规范器编辑
规范器类似于分析器,但它们只能发出单个标记。因此,它们没有分词器,并且只接受可用字符过滤器和标记过滤器的子集。只有基于每个字符的过滤器才允许。例如,允许小写过滤器,但不允许词干提取过滤器,因为词干提取过滤器需要查看整个关键字。可以在规范器定义中使用的过滤器当前列表为:arabic_normalization
、asciifolding
、bengali_normalization
、cjk_width
、decimal_digit
、elision
、german_normalization
、hindi_normalization
、indic_normalization
、lowercase
、pattern_replace
、persian_normalization
、scandinavian_folding
、serbian_normalization
、sorani_normalization
、trim
、uppercase
。
Elasticsearch 附带一个 lowercase
内置规范器。对于其他形式的规范化,需要自定义配置。
自定义规范器编辑
自定义规范器接受一个 字符过滤器 列表和一个 标记过滤器 列表。
response = client.indices.create( index: 'index', body: { settings: { analysis: { char_filter: { quote: { type: 'mapping', mappings: [ '« => "', '» => "' ] } }, normalizer: { my_normalizer: { type: 'custom', char_filter: [ 'quote' ], filter: [ 'lowercase', 'asciifolding' ] } } } }, mappings: { properties: { foo: { type: 'keyword', normalizer: 'my_normalizer' } } } } ) puts response
PUT index { "settings": { "analysis": { "char_filter": { "quote": { "type": "mapping", "mappings": [ "« => \"", "» => \"" ] } }, "normalizer": { "my_normalizer": { "type": "custom", "char_filter": ["quote"], "filter": ["lowercase", "asciifolding"] } } } }, "mappings": { "properties": { "foo": { "type": "keyword", "normalizer": "my_normalizer" } } } }