Elasticsearch基础篇(五):创建es索引并学习分析器、过滤器、分词器的作用和配置

创建es索引并学习分析器、过滤器、分词器的作用和配置

  • 一、基础概念
    • Elasticsearch与MySQL的类比
    • 1. ES与MySQL的结构类比图
    • 2. ES与MySQL的类比示意表格
    • 3. 索引中重要概念
      • 索引(Index)
      • 文档(Document)
      • 字段(Field)
      • 映射(Mapping)
  • 二、定义索引
    • 索引的组成
    • 索引示例
  • 三、索引分析
  • 四、官方文档(参考)
    • 分析器配置
      • 配置内置分析器(Configuring built-in analyzers)
      • 指定分析器(Specify an analyzer)
    • 内置分析器参考
    • 分词器参考
      • 面向单词的分词器
      • 面向部分单词的分词器
      • 结构化文本分词器
    • 分词过滤器参考(Token filter reference)
    • 字符过滤器参考(Character filters reference)
    • 标准化器(Normalizers)

一、基础概念

Elasticsearch 是一个分布式搜索和分析引擎,它使用JSON文档来存储数据。索引是Elasticsearch中数据的基本组织单元之一,下面是Elasticsearch索引相关的基本概念:

Elasticsearch与MySQL的类比

1. ES与MySQL的结构类比图

在这里插入图片描述

2. ES与MySQL的类比示意表格

结构元素ElasticsearchMySQL
数据库索引(Index)数据库(Database)
表格类型(Type)*表(Table)
记录/行文档(Document)记录(Row)
列/字段字段(Field)列(Column)
主键_id 字段主键(Primary Key)
查询语言Query DSLSQL

注意:在Elasticsearch 7.x版本之后,不再使用类型(Type)的概念,每个索引只包含文档。所以在新版本中,没有类型,只有索引和文档。因此es的索引我们也可以类比为mysql中的数据表

3. 索引中重要概念

索引(Index)

  • 索引是Elasticsearch中的主要数据存储单元。它类似于传统数据库中的表,但更加灵活。
  • 索引用于存储相关文档,这些文档可能属于不同的数据类型,但具有共同的查询需求。
  • 一个索引可以包含许多文档,每个文档都是一个JSON对象。

文档(Document)

  • 文档是索引中的基本数据单元。每个文档都是一个JSON对象,它包含了数据字段和对应的值。
  • 例如,在一个名为"books"的索引中,每个文档可能表示一本书,包含书名、作者、出版日期等字段。

字段(Field)

  • 字段(Field)是文档(Document)中包含数据的单个元素。字段可以包含不同类型的数据,如文本、数字、日期等

映射(Mapping)

  • 映射定义索引中每个字段的数据类型和属性。它告诉Elasticsearch如何解释和处理每个字段的数据。
  • 映射可以自动创建,也可以手动定义以更精确地控制字段的处理。

二、定义索引

在开发中es的index我们可以预先定义好,包括索引的别名(alias)、设置(settings)、映射(mappings)等。如果直接用默认的设置,添加文档时es会自动帮我们创建索引,但默认的不一定符合我们的需求

索引的组成

创建Elasticsearch索引的过程通常包括三个关键部分:别名(Aliases)、设置(Settings)、和映射(Mappings),每个部分的作用如下:

  1. 别名(Aliases)

    • 别名是索引的可选名称,允许您将一个或多个索引关联到一个别名上。
    • 别名用于简化查询和索引维护,可以用于切换索引版本、滚动索引、分离索引等操作。
    • 通过别名可以在不更改查询的情况下轻松切换索引,这对于数据版本管理非常有用
  2. 设置(Settings)

    • 设置包括了索引的配置参数,它们会影响索引的行为和性能。
    • 设置可以包括索引的分片和副本配置、刷新间隔、合并策略、搜索相关配置等。
    • 通过设置可以调整索引以满足特定需求。例如,可以设置分片的数量、副本的数量、自定义分析器等。
  3. 映射(Mappings)

    • 映射定义了索引中每个字段的数据类型和属性。它告诉Elasticsearch如何解释和处理文档中的数据。
    • 可以选择让Elasticsearch自动创建映射(Dynamic Mapping),或者可以显式定义映射以更精确地控制字段的处理(推荐显式定义)。
    • 映射定义通常包括字段名称、数据类型(如文本、整数、日期等)、分析器(用于文本字段的文本分词)等信息。

索引示例

使用Elasticsearch的REST API来创建一个名为"books"的索引 :

PUT /books
{"aliases": {"cn_book": {}},"settings": {"number_of_shards": 5,"number_of_replicas": 2},"mappings": {"properties": {"title": {"type": "text","analyzer": "standard"},"author": {"type": "keyword"},"publish_date": {"type": "date","format": "yyyy-MM-dd"}}}
}

以下是每个部分的说明:

aliases(别名)

  • 别名是一个可选项,允许您为索引定义一个或多个别名,以便更容易引用该索引。在示例中,索引被命名为"cn_book",并且有一个空的别名对象。

settings(设置)

  • 在设置部分,您可以配置索引的全局设置。
  • number_of_shards:指定索引分成的主分片数量。在示例中,索引分成了5个主分片。
  • number_of_replicas:指定每个主分片的副本数量。在示例中,每个主分片有2个副本,用于提高数据冗余和可用性。

mappings(映射)

  • 映射定义了索引中的字段及其数据类型和属性。
  • 在示例中,有三个字段定义:
    • title:类型为"text",使用"standard"分析器。这是一个文本字段,通常用于全文搜索。
    • author:类型为"keyword"。这是一个关键字字段,通常用于精确匹配和聚合。
    • publish_date:类型为"date",使用"yyyy-MM-dd"日期格式。这是一个日期字段,用于存储日期信息。

在这里插入图片描述

三、索引分析

{"aliases": {"data": {},"book": {}},"settings": {"index": {"refresh_interval": "5s","max_inner_result_window": "10000","max_result_window": "20000","analysis": {"analyzer": {"pinyin_analyzer": {"tokenizer": "my_pinyin"}},"tokenizer": {"my_pinyin": {"type": "pinyin","keep_separate_first_letter": false,"keep_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"lowercase": true,"remove_duplicated_term": true}},"char_filter": {"pinyin_multi": {"type": "mapping","mappings": ["重庆 => 从庆"]},"pinyin_first": {"type": "mapping","mappings_path": "pinyin_first.txt"},"remove_space": {"type": "pattern_replace","pattern": "[\\s「」﹝﹞·,。/《》?;‘’、:“”\\|【】\\{\\}\\~\\·\\!\\@\\#\\¥\\%\\……\\&\\*()\\—\\+\\-\\=\\,\\.\\/\\<\\>\\?\\;'\\\\,\"\\|\\[\\]\\{\\}\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\_\\+]*","replacement": ""}},"normalizer": {"sort_normalizer": {"type": "custom","char_filter": ["remove_space","pinyin_multi","pinyin_first"],"filter": ["cjk_width","asciifolding"]}}}}},"mappings": {"dynamic": "false"}
}
  1. 别名(Aliases):

    • “navy_data”: 这是一个名为"data"的索引别名。
    • “book”: 这是一个名为"book"的索引别名。
  2. 索引设置(Settings):

    • “index”: 这是索引的根配置。
      • “refresh_interval”: 索引的刷新间隔设置为"5s",表示每5秒进行一次刷新。
      • “max_inner_result_window”: 设置内部结果窗口的最大大小为"10000"。
      • “max_result_window”: 设置结果窗口的最大大小为"20000"。
      • “analysis”: 这是索引的文本分析配置。
        • “analyzer”: 文本分析器的配置。
          • “pinyin_analyzer”: 这是一个名为"pinyin_analyzer"的分析器。
            • “tokenizer”: 指定了使用的分词器,这里使用了名为"my_pinyin"的自定义分词器。
        • “tokenizer”: 自定义分词器的配置。
          • “my_pinyin”: 这是一个名为"my_pinyin"的分词器,类型为"pinyin"。
            • “keep_separate_first_letter”: 设置为"false",表示不保留拼音的首字母。
            • “keep_full_pinyin”: 设置为"true",表示保留完整拼音。
            • “keep_original”: 设置为"true",表示保留原始文本。
            • “limit_first_letter_length”: 设置首字母的长度限制为"16"。
            • “lowercase”: 设置为"true",表示将拼音转换为小写。
            • “remove_duplicated_term”: 设置为"true",表示删除重复的词项。
        • “char_filter”: 字符过滤器的配置。
          • “pinyin_multi”: 这是一个名为"pinyin_multi"的字符过滤器,类型为"mapping",用于将特定字符映射为其他字符。
          • “pinyin_first”: 这是一个名为"pinyin_first"的字符过滤器,类型为"mapping",使用了外部文件"pinyin_first.txt"中的映射。
          • “remove_space”: 这是一个名为"remove_space"的字符过滤器,类型为"pattern_replace",用于移除指定的空格和标点符号。
            • “pattern”: 指定了匹配的正则表达式模式。
            • “replacement”: 指定了替换的字符。
        • “normalizer”: 规范化器的配置。
          • “sort_normalizer”: 这是一个名为"sort_normalizer"的自定义规范化器。
            • “char_filter”: 包括了字符过滤器,包括"remove_space"、“pinyin_multi"和"pinyin_first”。
            • “filter”: 包括了过滤器,包括"cjk_width"和"asciifolding"。
  3. 映射(Mappings):

    • “dynamic”: 设置为"false",表示禁用动态映射,索引中的字段需要明确定义,不允许自动添加新字段。

四、官方文档(参考)

分析器配置

参考:Configure text analysis

  • 默认情况下,Elasticsearch对所有文本分析使用标准分析器。标准分析器为大多数自然语言和用例提供开箱即用的支持。如果选择使用标准分析器,通常不需要进一步的配置。

  • 如果标准分析器不满足您的需求,请查看和测试Elasticsearch的其他内置分析器。内置分析器不需要配置,但某些支持选项可用于调整其行为。例如,您可以配置标准分析器,以去除自定义停用词的列表。

  • 如果没有内置分析器满足您的需求,您可以测试并创建自定义分析器。自定义分析器涉及选择和组合不同的分析器组件,从而提供更大的控制权。
    分析器测试(Test an analyzer)
    analyzer API 用于查看由分析器生成的术语。内置分析器可以在请求中内联指定:

    POST _analyze
    {"analyzer": "whitespace","text":     "今天 是 周五"
    }
    

    执行结果

    {"tokens" : [{"token" : "今天","start_offset" : 0,"end_offset" : 2,"type" : "word","position" : 0},{"token" : "是","start_offset" : 3,"end_offset" : 4,"type" : "word","position" : 1},{"token" : "周五","start_offset" : 5,"end_offset" : 7,"type" : "word","position" : 2}]
    }
    

    还可以测试以下组合:

    ● A tokenizer 分词器
    ● Zero or more token filters 零个或多个分词过滤器
    ● Zero or more character filters 零个或多个字符过滤器

    POST _analyze
    {"tokenizer": "standard","filter":  [ "lowercase", "asciifolding" ],"text":      "Is this déja vu?"
    }
    

    自定义分析器

    PUT my-index-000001
    {"settings": {"analysis": {"analyzer": {# 自定义分析器"std_folded": { "type": "custom","tokenizer": "standard","filter": ["lowercase","asciifolding"]}}}},"mappings": {"properties": {"my_text": {"type": "text","analyzer": "std_folded" }}}
    }GET my-index-000001/_analyze 
    {"analyzer": "std_folded", "text":     "Is this déjà vu?"
    }GET my-index-000001/_analyze 
    {"field": "my_text", "text":  "Is this déjà vu?"
    }
    

配置内置分析器(Configuring built-in analyzers)

内置分析器无需任何配置即可直接使用。 然而,其中一些支持配置选项来改变其行为。例如,标准分析器可以配置为支持停用词列表:

PUT my-index-000001
{"settings": {"analysis": {"analyzer": {"std_english": { "type":      "standard","stopwords": "_english_"}}}},"mappings": {"properties": {"my_text": {"type":     "text","analyzer": "standard", "fields": {"english": {"type":     "text","analyzer": "std_english" }}}}}
}POST my-index-000001/_analyze
{"field": "my_text", "text": "The old brown cow"
}POST my-index-000001/_analyze
{"field": "my_text.english", "text": "The old brown cow"
}

指定分析器(Specify an analyzer)

Elasticsearch提供了多种指定内置或自定义分析器的方法:

  1. 通过文本字段、索引或查询
  2. 用于索引或搜索时
  • 在需要时,可以在不同级别和不同时间指定分析器,这是灵活性的体现。
  • 在大多数情况下,采用简单的方法最有效:为每个文本字段指定一个分析器,如在“为字段指定分析器”中所述。
  • 这种方法与Elasticsearch的默认行为很好地配合,让您可以在索引和搜索时使用相同的分析器。它还让您能够通过使用"get mapping" API快速查看哪个分析器适用于哪个字段。
  • 如果您通常不为索引创建映射,您可以使用索引模板来实现类似的效果。

Elasticsearch如何确定索引分析器:
Elasticsearch通过按以下顺序检查以下参数来确定要使用的索引分析器:

  1. 字段的分析器映射参数。请参阅“为字段指定分析器”。
  2. analysis.analyzer.default索引设置。请参阅“为索引指定默认分析器”。
  3. 如果没有指定上述参数,则使用标准分析器。

为字段指定分析器:
在映射索引时,您可以使用分析器映射参数为每个文本字段指定一个分析器。以下是一个创建索引的API请求示例,将空格分析器设置为标题字段的分析器:

PUT my-index-000001
{"mappings": {"properties": {"title": {"type": "text","analyzer": "whitespace"}}}
}

为索引指定默认分析器:
除了字段级分析器,您还可以使用analysis.analyzer.default设置为索引设置一个备用分析器。以下是一个创建索引的API请求示例,将简单分析器设置为my-index-000001的备用分析器:

PUT my-index-000001
{"settings": {"analysis": {"analyzer": {"default": {"type": "simple"}}}}
}

Elasticsearch如何确定搜索分析器:
在大多数情况下,指定不同的搜索分析器是不必要的。这样做可能会对相关性产生负面影响,导致意外的搜索结果。

如果选择指定单独的搜索分析器,我们建议在部署到生产环境之前进行彻底的分析配置测试。

在搜索时,Elasticsearch通过按以下顺序检查以下参数来确定要使用的分析器:

  1. 查询中的analyzer参数。请参阅“为查询指定搜索分析器”。
  2. 字段的search_analyzer映射参数。请参阅“为字段指定搜索分析器”。
  3. analysis.analyzer.default_search索引设置。请参阅“为索引指定默认搜索分析器”。
  4. 字段的分析器映射参数。请参阅“为字段指定分析器”。
  5. 如果没有指定上述参数,则使用标准分析器

为查询指定搜索分析器:
在编写全文查询时,您可以使用analyzer参数来指定搜索分析器。如果提供了此参数,它将覆盖任何其他搜索分析器。以下是一个示例,为匹配查询设置了停用词分析器作为搜索分析器:

GET my-index-000001/_search
{"query": {"match": {"message": {"query": "Quick foxes","analyzer": "stop"}}}
}

为字段指定搜索分析器:
在映射索引时,您可以使用search_analyzer映射参数为每个文本字段指定搜索分析器。如果提供了搜索分析器,则必须还使用analyzer参数指定索引分析器。以下是一个创建索引的API请求示例,将简单分析器设置为标题字段的搜索分析器:

PUT my-index-000001
{"mappings": {"properties": {"title": {"type": "text","analyzer": "whitespace","search_analyzer": "simple"}}}
}

为索引指定默认搜索分析器:
在创建索引时,您可以使用analysis.analyzer.default_search设置为索引设置一个默认搜索分析器。如果提供了搜索分析器,则必须使用analysis.analyzer.default设置指定默认索引分析器。以下是一个创建索引的API请求示例,将空格分析器设置为my-index-000001的默认搜索分析器:

PUT my-index-000001
{"settings": {"analysis": {"analyzer": {"default": {"type": "simple"},"default_search": {"type": "whitespace"}}}}
}

这些设置和指定分析器的方式可根据您的需求和索引映射的复杂程度进行调整。根据具体的需求,您可以选择使用简单或复杂的分析配置。

内置分析器参考

官网参考:Built-in analyzer reference

Elasticsearch内置了各种分析器,可以在不需要进一步配置的情况下用于任何索引:

  1. 标准分析器(Standard Analyzer)

    • 标准分析器根据Unicode文本分割算法在单词边界将文本划分为项(terms)。
    • 它移除大多数标点符号、将项转换为小写,并支持移除停用词。
  2. 简单分析器(Simple Analyzer)

    • 简单分析器在遇到非字母字符时将文本划分为项。
    • 它将所有项转换为小写。
  3. 空格分析器(Whitespace Analyzer)

    • 空格分析器在遇到任何空格字符时将文本划分为项。
    • 它不将项转换为小写。
  4. 停用词分析器(Stop Analyzer)

    • 停用词分析器类似于简单分析器,但还支持停用词的移除。
  5. 关键字分析器(Keyword Analyzer)

    • 关键字分析器是一个“无操作”分析器,接受任何文本并输出与原始文本相同的单个项。
  6. 模式分析器(Pattern Analyzer)

    • 模式分析器使用正则表达式将文本划分为项。
    • 它支持小写处理和停用词的移除。
  7. 语言分析器(Language Analyzers)

    • Elasticsearch提供了许多语言特定的分析器,如英语或法语。
  8. 指纹分析器(Fingerprint Analyzer)

    • 指纹分析器是一个专门的分析器,用于创建用于重复检测的指纹。
  9. 自定义分析器(Custom Analyzers)

    • 如果找不到适合您需求的分析器,您可以创建一个自定义分析器,结合适当的字符过滤器、标记器和标记过滤器。

分词器参考

一个分词器接收一系列字符流,将其分解成单独的分词(通常是单个单词),并输出一系列分词。例如,一个空格分词器会在看到任何空格时将文本分成分词。它会将文本 “Quick brown fox!” 转换为词项 [Quick, brown, fox!]。

分词器还负责记录以下信息:

●每个词项的顺序或位置(用于短语和单词接近查询)。
●每个词项表示的原始单词的起始和结束字符偏移量(用于突出显示搜索片段)。
●分词类型,对生成的每个词项进行分类,如 、 或 。更简单的分析器只生成单词分词类型。

Elasticsearch内置了许多分词器,可以用于构建自定义分析器。

面向单词的分词器

以下的分词器通常用于将全文分词成单独的单词:

  1. 标准分词器(Standard Tokenizer)

    • 标准分词器根据Unicode文本分割算法在单词边界将文本划分为词项。
    • 它移除大多数标点符号。对于大多数语言来说,这是最佳选择
  2. 字母分词器(Letter Tokenizer)

    • 字母分词器在遇到非字母字符时将文本划分为词项。
  3. 小写分词器(Lowercase Tokenizer)

    • 小写分词器,类似于字母分词器,在遇到非字母字符时将文本划分为词项,但还将所有词项转换为小写。
  4. 空格分词器(Whitespace Tokenizer)

    • 空格分词器在遇到任何空格字符时将文本划分为词项。
  5. UAX URL Email 分词器(UAX URL Email Tokenizer)

    • uax_url_email 分词器类似于标准分词器,不过它识别URL和电子邮件地址作为单个词项。
  6. 经典分词器(Classic Tokenizer)

    • 经典分词器是一种基于语法的英语语言分词器。
  7. 泰语分词器(Thai Tokenizer)

    • 泰语分词器将泰文文本分割成单词。

面向部分单词的分词器

这些分词器将文本或单词分割成小片段,用于部分单词匹配:

  1. N-Gram 分词器(N-Gram Tokenizer)

    • ngram 分词器可以在遇到指定字符列表之一(例如空格或标点符号)时将文本分解为词项,然后返回每个词项的n-gram(连续字母的滑动窗口),例如 quick → [qu, ui, ic, ck]。
  2. 边缘 N-Gram 分词器(Edge N-Gram Tokenizer)

    • 边缘 ngram 分词器可以在遇到指定字符列表之一(例如空格或标点符号)时将文本分解为词项,然后返回每个词项的n-gram,这些n-gram锚定在单词的开头,例如 quick → [q, qu, qui, quic, quick]。

结构化文本分词器

以下的分词器通常用于结构化文本,如标识符、电子邮件地址、邮政编码和路径,而不是用于全文:

  1. 关键字分词器(Keyword Tokenizer)

    • 关键字分词器是一个“无操作”分词器,接受任何文本并输出与原始文本相同的单个词项。它可以与分词过滤器(如小写化)结合使用以规范分析后的词项。
  2. 模式分词器(Pattern Tokenizer)

    • 模式分词器使用正则表达式,可以在匹配单词分隔符时将文本分解为词项,或捕获匹配的文本作为词项。
  3. 简单模式分词器(Simple Pattern Tokenizer)

    • 简单模式分词器使用正则表达式捕获匹配的文本作为词项。它使用正则表达式功能的有限子集,通常比模式分词器更快。
  4. 字符组分词器(Char Group Tokenizer)

    • 字符组分词器可通过一组要分割的字符进行配置,通常比运行正则表达式更经济。
  5. 简单模式拆分分词器(Simple Pattern Split Tokenizer)

    • 简单模式拆分分词器使用与简单模式分词器相同的有限正则表达式子集,但在匹配时分割输入,而不是将匹配作为词项返回。
  6. 路径分词器(Path Tokenizer)

    • path_hierarchy 分词器接受分层值,如文件系统路径,按路径分隔符拆分,并为树中的每个组件发出一个词

分词过滤器参考(Token filter reference)

官网参考:Token filter reference

分词过滤器(Token filters)接受来自分词器的分词流(tokens),可以修改分词(例如小写化)、删除分词(例如去除停用词)或添加分词(例如同义词)。Elasticsearch提供了多个内置的分词过滤器,可以用它们来构建自定义分析器。

  • Apostrophetokenfilter
  • ASCIIfoldingtokenfilter
  • CJKbigramtokenfilter
  • CJKwidthtokenfilter
  • Classictokenfilter
  • Commongramstokenfilter
  • Conditionaltokenfilter
  • Decimaldigittokenfilter
  • Delimitedpayloadtokenfilter
  • Dictionarydecompoundertokenfilter
  • Edgen-gramtokenfilter
  • Elisiontokenfilter
  • Fingerprinttokenfilter
  • Flattengraphtokenfilter
  • Hunspelltokenfilter
  • Hyphenationdecompoundertokenfilter
  • Keeptypestokenfilter
  • Keepwordstokenfilter
  • Keywordmarkertokenfilter
  • Keywordrepeattokenfilter
  • KStemtokenfilter
  • Lengthtokenfilter
  • Limittokencounttokenfilter
  • Lowercasetokenfilter
  • MinHashtokenfilter
  • Multiplexertokenfilter
  • N-gramtokenfilter
  • Normalizationtokenfilters
  • Patterncapturetokenfilter
  • Patternreplacetokenfilter
  • Phonetictokenfilter
  • Porterstemtokenfilter
  • Predicatescripttokenfilter
  • Removeduplicatestokenfilter
  • Reversetokenfilter
  • Shingletokenfilter
  • Snowballtokenfilter
  • Stemmertokenfilter
  • Stemmeroverridetokenfilter
  • Stoptokenfilter
  • Synonymtokenfilter
  • Synonymgraphtokenfilter
  • Trimtokenfilter
  • Truncatetokenfilter
  • Uniquetokenfilter
  • Uppercasetokenfilter
  • Worddelimitertokenfilter
  • Worddelimitergraphtokenfilter

字符过滤器参考(Character filters reference)

官网参考:Character filters reference

  • 字符过滤器(Character filters)用于在字符流传递给分词器之前对其进行预处理。

  • 字符过滤器接收原始文本作为字符流,并可以通过添加、删除或更改字符来转换字符流。例如,字符过滤器可以用于将印度-阿拉伯数字(٠‎١٢٣٤٥٦٧٨‎٩‎)转换为其阿拉伯-拉丁等效形式(0123456789),或者从流中剥离 HTML 元素,如

Elasticsearch 提供了多个内置的字符过滤器,可以用它们来构建自定义分析器。

  • HTML 剥离字符过滤器(HTML Strip Character Filter):剥离 HTML 元素,如 ,并解码 HTML 实体,如 &。
  • 映射字符过滤器(Mapping Character Filter):替换指定字符串的任何出现次数为指定的替代字符串。
  • 模式替换字符过滤器(Pattern Replace Character Filter):使用指定的替代字符串替换与正则表达式匹配的任何字符。

标准化器(Normalizers)

规范化器与分析器类似,不同之处在于它们只能发出单个令牌。因此,它们没有标记化器,只接受可用的字符过滤器和标记过滤器的子集。只允许使用按字符工作的筛选器。例如,允许使用小写过滤器,但不允许使用词干过滤器,因为词干过滤器需要将关键字作为一个整体来查看。可在规范化器中使用的过滤器的当前列表如下:阿拉伯规范化、asciifolding、bengali_normalization、cjk_width、decimal_digh、elision、german_normalization、hindi_normalizing、indic_normalization、小写、persian_normalizion、scandinavian_folding、serbian_normalized、sorani_normalize、大写。Elasticsearch附带了一个小写的内置规范器。对于其他形式的规范化,需要自定义配置。
以下是一个示例,演示如何创建一个自定义规范化器:

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"}}}
}

在上述示例中,我们创建了一个名为my_normalizer的自定义规范化器,使用了字符过滤器quote和过滤器lowercaseasciifolding。然后,我们将这个规范化器应用于索引中的foo字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023.10.18 区别 对象 和 类对象

目录 对象 类对象 总结 对象 对象是类的实例化结果它是内存中的一块区域&#xff0c;包含了该类的属性和方法的具体值和实现对象具有唯一的标识、状态、行为通过创建类的实例&#xff0c;我们可以在程序中操作和处理具体的对象 简单实例 class Person {public int high 1…

车载开发学习——CAN总线

CAN总线又称为汽车总线&#xff0c;全程为“控制器局域网&#xff08;Controller Area Network&#xff09;”&#xff0c;即区域网络控制器&#xff0c;它将区域内的单一控制单元以某种形式连接在一起&#xff0c;形成一个系统。在这个系统内&#xff0c;大家以一种大家都认可…

Netty系列教程之NIO基础知识

近30集的孙哥视频课程&#xff0c;看完一集整理一集来的&#xff0c;内容有点多&#xff0c;请大家放心食用~ 1. 网络通讯的演变 1.1 多线程版网络通讯 在传统的开发模式中&#xff0c;客户端发起一个 HTTP 请求的过程就是建立一个 socket 通信的过程&#xff0c;服务端在建立…

VR全景图片如何拍摄制作,拍摄制作过程中要注意什么?

引言&#xff1a; VR全景图片就是通过专业的相机设备捕捉到的一个空间的高清图像&#xff0c;再经过专业工具进行拼合&#xff0c;呈现出一种环绕式的视觉效果。想象一下&#xff0c;当你站在一个完全真实的环境中&#xff0c;可以自由地转动视角&#xff0c;看到四周的景色&a…

高数定理集合啦

haha~ 最近在准备数学竞赛&#xff0c;好久没有发布笔记啦&#xff0c;今天就来一波高数里常用的定理吧&#xff0c;不全面的话后续会更新哒~ 费马定理&#xff1a;对于一个函数的局部极值点&#xff0c;如果导数存在&#xff0c;那么导数在该点处必须为零&#xff0c;即 f(x)0…

SQL数据库管理工具RazorSQL mac中文版特点与功能

RazorSQL mac是一款功能强大的SQL数据库管理工具&#xff0c;它支持多种数据库&#xff0c;包括MySQL、Oracle、Microsoft SQL Server、SQLite、PostgreSQL等。 RazorSQL mac 软件特点和功能 多种数据库支持&#xff1a;RazorSQL支持多种数据库&#xff0c;用户可以通过一个工…

基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用

查看原文>>>【案例教程】基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用 Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析…

安装Elasticsearch步骤(包含遇到的问题及解决方案)

注&#xff1a;笔者是在centos云服务器环境下安装的Elasticsearch 目录 1.安装前准备 2.下载Elasticsearch 3.启动Elasticsearch 非常容易出问题 第一次运行时&#xff0c;可能出现如下错误&#xff1a; 一、内存不足原因启动失败 二、使用root用户启动问题 三、启动ES自…

uniapp使用uQRCode绘制二维码,下载到本地,调起微信扫一扫二维码核销

1.效果 2.在utils文件夹下创建uqrcode.js // uqrcode.js //--------------------------------------------------------------------- // github https://github.com/Sansnn/uQRCode //---------------------------------------------------------------------let uQRCode {…

第二证券:A股三季报披露全面启动 多领域上市公司业绩表现亮点纷呈

A股上市公司三季报宣告全面发动。Wind数据闪现&#xff0c;到10月17日记者发稿&#xff0c;来自沪深北三大交易所近80家上市公司首要晒出了最新运营效果体现的“效果单”。本周&#xff0c;相关财报宣告家数也将增至270家左右。与此同时&#xff0c;10月以来&#xff0c;亦有不…

怎么把图片改成jpg格式?

怎么把图片改成jpg格式&#xff1f;大家都知道&#xff0c;随着计算机被发明到现在已经存在了很多年&#xff0c;在这么多的的技术发展过程中&#xff0c;也形成了种类非常多的图片文件格式&#xff0c;例如平时我们能接触到的图片格式有jpg、png、gif、bmp、heic、tiff、jfif、…

vcpkg manifest 的使用

最近项目上要使用 CMakeLists 管理&#xff0c;由于 Windows 版本有依赖到 vcpkg 提供的库&#xff0c;所以需要使用 vcpkg manifest 来统一设置库的版本&#xff0c;方便后续维护 推荐一个文章&#xff0c;介绍的可以说是非常全面了 VCPKG 特性 - Versioning 不过里面也有一些…

C++标准库算法整理

目录 1、数值操作 1.1、std::accumulate 1.2、std::inner_product 1.3、std::partial_sum 1.4、std::exclusive_scan 1.5、std::inclusive_scan 1.6、std::reduce 2、相邻元素 2.1、std::adjacent_difference 2.2、std::adjacent_find 2.3、std::unique 2.4、std::u…

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在 一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0a将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 影响范围 apache &#xff1a;2.4.0~2.…

易点易动设备管理系统帮助生产企业提升设备巡检效率

在现代制造业中&#xff0c;设备的正常运行对于生产企业的成功至关重要。然而&#xff0c;设备巡检是确保设备安全性和可靠性的关键环节&#xff0c;但却常常耗费大量时间和资源。为了解决这个问题&#xff0c;许多企业采用了现代化的设备管理系统&#xff0c;其中易点易动设备…

山西电力市场日前价格预测【2023-10-19】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-19&#xff09;山西电力市场全天平均日前电价为210.83元/MWh。其中&#xff0c;最高日前电价为337.00元/MWh&#xff0c;预计出现在18: 30。最低日前电价为0.00元/MWh&#xff0c;预计出…

在Maven中配置代理服务器的详细教程

在Maven中配置代理服务器的详细教程如下&#xff1a; 首先&#xff0c;确保您已经安装了Maven。创建一个新的Maven项目。在命令行中输入以下命令&#xff1a; mvn archetype:generate -DgroupIdcom.example -DartifactIdmy-app -DarchetypeArtifactIdmaven-archetype-quickst…

【数据结构】Java对象的比较

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力…

Spring framework Day21:Spring AOP 注解结合配置类示例

前言 Spring AOP是一种强大的面向切面编程工具&#xff0c;它能够帮助我们更好地处理与核心业务逻辑无关的横切关注点。通过使用注解和配置类的方式&#xff0c;我们可以更加简洁和灵活地实现AOP。 本文将以一个示例来介绍如何结合注解和配置类来使用Spring AOP。通过这个示例…

Windows 钉钉多开 dingtalkRC版

亲测可用 下载链接&#xff1a; https://dtapp-pub.dingtalk.com/dingtalk-desktop/win_installer/RC/DingTalk_v6.5.20-RC.7229101.exe