带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(13)

简介: 带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(13)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(12) https://developer.aliyun.com/article/1229761




为索引设置默认的分词器

 

在不给文本字段或者索引设置分词器的情况下,standard 分词器是 Elasticsearch 默认的分词器。上一个例子中实现了为一个文本字段设置分词器,但如果想要索引中所有的文本字段都是用相同的分词器,那么在每一个文本字段都使用 analyzer 指定就显得太繁琐。这种情况下我们可以为索引属性 analysis.analyzer.default 指定默认的分词器。


PUT test-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "simple"
        }
      }
    }
  }
}
POST test-000001/_analyze
{
  "explain": true, 
  "text": [
    "Heya, we Are Elastic."
  ]
}

通过 explain: true 输出明细可以看到当前使用的是索引默认的分词器 simple,通过非字母字符分割,单词进行了小写转换。


{
  "detail" : {
    "custom_analyzer" : false,
    "analyzer" : {
      "name" : "default"
      "tokens" : [
        {
          "token" : "heya"
        },
        {
          "token" : "we"
        },
        {
          "token" : "are"
        },
        {
          "token" : "elastic"
        }
      ]
    }
  }
}

搜索时使用指定分词器

 

大多数情况下数据写入阶段和搜索阶段分词器使用的是同一个,这么做的原因是尽可能的让匹配到内容在和写入时保持一致,避免返回不相关的文档,但 Elasticsearch 同时也支持搜索时使用不同的分词器。需要单独为搜索配置分词器的场景多数是因为写入时使用的的分词器将文本拆分粒度比较细,如果搜索阶段也使用同样的分词器,倒排索引中将可能匹配到不是特别相关的文档。

 

搜索指定分词器的使用上更建议你经过周密的测试再投入生产环境,应该尽可能避免搜索使用不同的分词器。实现搜索阶段指定分词器有以下三种不同的方式,优先级依次从高到低进行覆盖:

l 搜索时文本字段指定 analyzer 属性。

l 创建索引时字段指定 search_analyzer 属性。

l 创建索引时指定 analysis.analyzer.default_search 默认搜索分词器,设置 default_search 同时也需要设置索引默认分词器 analysis.analyzer.default_search。

 

在指定分词器时默认情况下当一个字段仅在 analyzer 中指定的话,该字段搜索和写入时都会使用相同的分词器进行处理。如果希望在搜索时使用不同的分词器就需要在 search_analyzer 中单独指定。


PUT test-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "standard"            #1
        },
        "default_search": {
          "type": "whitespace"            #2
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text"
      },
      "title": {
        "type": "text",
        "search_analyzer": "keyword"    #3
      }
    }
  }
}
POST test-000001/_doc                    #4
{
  "content": "Heya, we Are Elastic.",
  "title": "You Know, for Search!"
}

#1 写入时使用 standard 分词器,内容将会被转换为小写。

 

#2 搜索时使用 whitespace,通过空格切分,内容不会进行转换。

 

#3 title 字段在搜索时使用 keyword 分词器,搜索内容会作为一个整体进行匹配。

 

#4 索引中写入一条数据。


GET test-000001/_search
{
  "query": {
    "match": {
      "content": "Elastic"
    }
  } 
}

通过上面索引的设置,content 字段搜索 Elastic 时因为使用 whitespace 分词器没有做小写转换的操作,将会无法匹配到内容。

 

GET test-000001/_search
{
  "query": {
    "match": {
      "title": "You Know"
    }
  } 
}

title 字段搜索时使用 keyword 分词器,这时候会将 You Know 当作一个整体在倒排索引中匹配,而写入时已被拆分为了单个单词,所以这条查询也将无法匹配到内容。在这种情况下想要能够匹配上写入的文档,就需要在搜索时指定和写入时相同的分词器进行查询。


GET test-000001/_search
{
  "query": {
    "match": {
      "title": {
        "query": "You Know",
        "analyzer": "standard"        #1
      }
    }
  }
}

#1 搜索时指定使用 standard 进行分词保持写入一致。



 《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(14) https://developer.aliyun.com/article/1229755

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
存储 数据可视化 项目管理
设计师工作不再孤军奋战:协作软件带来的团队力量
设计行业正逐步向数字化转型,协作软件成为设计团队不可或缺的工具。它不仅促进了多人合作与创意碰撞,提高了工作透明度和进度跟踪,还增强了远程协作的灵活性,简化了文件管理和版本控制,实现了高效的任务分配和责任追踪,加强了客户沟通与需求管理,以及知识管理和资源共享。协作软件全面优化了设计工作流程,提升了团队的执行力和创造力。
|
缓存 监控 算法
Linux内核的SLAB内存管理机制
Linux内核的SLAB内存管理机制
1076 4
|
安全 Cloud Native 双11
阿里云原生容器服务产品体系-阿里云容器镜像服务ACR介绍
阿里云原生容器服务产品体系-阿里云容器镜像服务ACR介绍
阿里云原生容器服务产品体系-阿里云容器镜像服务ACR介绍
jira学习案例3-对比常见mock方案
jira学习案例3-对比常见mock方案
198 0
jira学习案例3-对比常见mock方案
|
设计模式 C#
设计模式——创建型模式
设计模式——创建型模式
91 0
|
SQL 运维 安全
使用 NineData 实现备份集的实时查询
NineData 快速简单地实现备份集的实时查询。另外,除了实时备份数据查询外,NineData 在数据备份方面也突破传统技术方案,推出实时日志备份:基于增量日志监听采集技术,实时获取并备份数据库中的变化数据,实现秒级 RPO 的备份能力,真正做到数据零丢失。有效保护企业的核心数据,构筑企业数据安全的最后一道防线。
262 0
使用 NineData 实现备份集的实时查询
|
API 图形学
【Unity细节】RigidBody中Dynamic和Kinematic的区别
【Unity细节】RigidBody中Dynamic和Kinematic的区别
304 0
|
应用服务中间件 nginx

热门文章

最新文章