【Elasticsearch】-配置分词器

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch中的文本分析发生在以下两个时机,索引时 当文档被索引时,任何文本字段值都会被分析;搜索时 在文本字段上运行全文搜索时,会分析查询字符串。

参考文档

https://www.elastic.co/guide/en/elasticsearch/reference/7.11/analysis.html

一、简介

文本分析发生在以下两个时机

索引时 当文档被索引时,任何文本字段值都会被分析。

搜索时 在文本字段上运行全文搜索时,会分析查询字符串

二、索引时设置分词器

在大多数情况下,应在索引和搜索时使用相同的分析器。 这可确保字段的值和查询字符串更改为相同形式的标记。 反过来,这可以确保令牌在搜索期间按预期匹配。

在索引上设置并使用自定义分析器

PUT my-index-000001

{

 "settings": {

   "analysis": {

     "analyzer": {

       "std_folded": {

         "type": "custom",

         #定义一个名为 std_folded 的自定义分析器。

         "tokenizer": "standard",

         "filter": [

           "lowercase",

           "asciifolding"

         ]

       }

     }

   }

 },

 "mappings": {

   "properties": {

     #字段 my_text 使用 std_folded 分析器。

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

}

自定义分析器

当内置分析器不能满足您的需求时,您可以创建一个自定义分析器,它使用以下适当组合:

  • 零个或多个字符过滤器
  • 分词器
  • 零个或多个令牌过滤器。

自定义分词器接收以下参数

tokenizer

内置或定制的分词器。

必需

char_filter

可选的内置或自定义字符过滤器数组。

非必需

filter

可选的内置或自定义令牌过滤器数组。

非必需

以下是自定分词器的一个例子

PUT my-index-000001

{

 "settings": {

   "analysis": {

     "analyzer": {

       "my_custom_analyzer": {

         "type": "custom",

         "char_filter": [

           "emoticons"

         ],

         "tokenizer": "punctuation",

         "filter": [

           "lowercase",

           "english_stop"

         ]

       }

     },

     "tokenizer": {

       "punctuation": {

         "type": "pattern",

         "pattern": "[ .,!?]"

       }

     },

     "char_filter": {

       "emoticons": {

         "type": "mapping",

         "mappings": [

           ":) => _happy_",

           ":( => _sad_"

         ]

       }

     },

     "filter": {

       "english_stop": {

         "type": "stop",

         "stopwords": "_english_"

       }

     }

   }

 }

}


POST my-index-000001/_analyze

{

 "analyzer": "my_custom_analyzer",

 "text": "I'm a :) person, and you?"

}

Elasticsearch 通过依次检查以下参数来确定要使用的索引分析器:

  1. 字段的分析器映射参数。
  2. analysis.analyzer.default 索引设置。
  3. 如果没有指定这些参数,则使用标准分析器。


以下创建索引 API 请求将空白分析器设置为标题字段的分析器。

PUT my-index-000001

{

 "mappings": {

   "properties": {

     "title": {

       "type": "text",

       "analyzer": "whitespace"

     }

   }

 }

}

除了字段级分析器之外,您还可以设置备用分析器以使用 analysis.analyzer.default 设置。

PUT my-index-000001

{

 "settings": {

   "analysis": {

     "analyzer": {

       "default": {

         "type": "simple"

       }

     }

   }

 }

}

二、搜索时设置分词器

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

  1. 搜索查询中的分析器参数。
  2. 字段的 search_analyzer 映射参数。
  3. analysis.analyzer.default_search 索引设置。
  4. 字段的分析器映射参数。
  5. 如果没有指定这些参数,则使用标准分析器。

编写全文查询时,可以使用 analyzer 参数指定搜索分析器。 如果提供,它将覆盖任何其他搜索分析器。比如以下例子

GET my-index-000001/_search

{

 "query": {

   "match": {

     "message": {

       "query": "Quick foxes",

       "analyzer": "stop"

     }

   }

 }

}

创建索引时设置默认的搜索分析器

# 以下创建索引 API 请求将空白分析器设置为 my-index-000001 索引的默认搜索分析器

PUT my-index-000001

{

 "settings": {

   "analysis": {

     "analyzer": {

       "default": {

         "type": "simple"

       },

       "default_search": {

         "type": "whitespace"

       }

     }

   }

 }

}

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
23天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
109 0
|
2月前
|
Docker 索引 容器
Elasticsearch跨集群检索配置
Elasticsearch跨集群检索配置
42 1
|
5月前
|
存储 人工智能 自然语言处理
ElasticSearch实战指南必知必会:安装分词器、高级查询、打分机制
ElasticSearch实战指南必知必会:安装分词器、高级查询、打分机制
ElasticSearch实战指南必知必会:安装分词器、高级查询、打分机制
|
3月前
|
前端开发 安全 Ubuntu
Elasticsearch安装和配置
Elasticsearch安装和配置
116 0
|
2月前
|
自然语言处理
Elasticsearch+IK+pinyin自定义分词器
Elasticsearch+IK+pinyin自定义分词器
27 0
|
2月前
|
数据安全/隐私保护
spring-boot-starter-data-elasticsearch es带x-pack后台配置
spring-boot-starter-data-elasticsearch es带x-pack后台配置
24 0
|
3月前
|
自然语言处理 数据可视化 算法
史上最详细Docker安装Elasticsearch、ik分词器、可视化工具,每一步都带有步骤图!!!
史上最详细Docker安装Elasticsearch、ik分词器、可视化工具,每一步都带有步骤图!!!
339 0
史上最详细Docker安装Elasticsearch、ik分词器、可视化工具,每一步都带有步骤图!!!
|
4月前
|
NoSQL Java API
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
56 0
|
4月前
|
数据可视化 Java 关系型数据库
Elasticsearch【环境搭建 02】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用举例)
Elasticsearch【环境搭建 02】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用举例)
83 0
|
4月前
|
Java API
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
75 0