es分词器错误分析

令人遗憾的是,许多早期的互联网啤酒配方不一定是易于消化的格式。 也就是说,这些食谱是通常由电子邮件或论坛帖子最初组成的非结构化混合的说明和成分列表。

因此,虽然很难轻松地将这些配方放入传统的数据存储中(表面上看是为了更轻松地进行搜索),但它们对于当前形式的ElasticSearch来说是完美的。

因此,想象一下一个充满啤酒配方的ElasticSearch索引,因为……嗯……我喜欢酿造啤酒(也喝啤酒)。

首先,我将使用Node的ElasticSearch Client将一些啤酒配方添加到ElasticSearch中(请注意,代码虽然是CoffeeScript )。 我将这些啤酒食谱添加到beer_recipes索引中,如下所示:

添加啤酒食谱

beer_1 = {name: "Todd Enders' Witbier",style: "wit, Belgian ale, wheat beer",ingredients: "4.0 lbs Belgian pils malt, 4.0 lbs raw soft red winter wheat, 0.5 lbs rolled oats, 0.75 oz coriander, freshly ground Zest from two table oranges and two lemons, 1.0 oz 3.1% AA Saaz, 3/4 corn sugar for priming, Hoegaarden strain yeast"
}client.index('beer_recipes', 'beer', beer_1).on('data', (data) ->console.log(data)
).exec()

请注意,如何在ingredients字段中找到食谱JSON文档的有趣部分,称为beer_1 。 该字段基本上是一大串有价值的文本(您可以想象此字符串本质上是电子邮件的正文)。 因此,尽管ingredients字段是非结构化的,但人们显然仍希望进行搜索。

我将再添加一个好的方法:

添加第二份啤酒食谱

beer_2 = {name: "Wit",style: "wit, Belgian ale, wheat beer",ingredients: "4 lbs DeWulf-Cosyns 'Pils' malt, 3 lbs brewers' flaked wheat (inauthentic; will try raw wheat nest time), 6 oz rolled oats, 1 oz Saaz hops (3.3% AA), 0.75 oz bitter (Curacao) orange peel quarters (dried), 1 oz sweet orange peel (dried), 0.75 oz coriander (cracked), 0.75 oz anise seed, one small pinch cumin, 0.75 cup corn sugar (priming), 10 ml 88% food-grade lactic acid (at bottling), BrewTek 'Belgian Wheat' yeast"
}client.index('beer_recipes', 'beer', beer_2).on('data', (data) ->console.log(data)
).exec()

这是一个炎热的夏日,我想我想用柠檬作为原料制作啤酒(要清楚:我想用柠檬皮(从柠檬皮获得)。 因此,自然地,我需要查找(即搜索)其中包含柠檬的食谱。

因此,我将在索引中搜索包含“柠檬”一词的食谱,如下所示:

寻找柠檬

query = { "query" : { "term" : { "ingredients" : "lemon" } } }client.search('beer_recipes', 'beer', query).on('data', (data) ->data = JSON.parse(data)for doc in data.hits.hitsconsole.log doc._source.styleconsole.log doc._source.nameconsole.log doc._source.ingredients
).exec()

但是什么都没有显示-没有结果! 这是为什么?

如果仔细查看前面的代码示例(具体来说是beer_1 JSON文档),您会发现文本中有“柠檬”一词(即“……两个橙子和两个柠檬……”)。 事实证明,默认情况下,ElasticSearch对值进行索引的方式,柠檬不一定匹配,但是柠檬可以匹配。

寻找柠檬

query = { "query" : { "term" : { "ingredients" : "lemons" } } }client.search('beer_recipes', 'beer', query).on('data', (data) ->data = JSON.parse(data)for doc in data.hits.hitsconsole.log doc._source.styleconsole.log doc._source.nameconsole.log doc._source.ingredients
).exec()

瞧,这个搜索成功了! 但这至少是不便的。 基本上, ingredients字段中的单词按原样标记。 因此,搜索“柠檬”有效,而“柠檬”无效。 注意:有多种搜索机制,对“ lemon *”的搜索应已返回结果。

将文档添加到ElasticSearch索引后,将分析其字段并将其转换为tokens 。 对索引执行搜索时,将对这些标记进行搜索。 ElasticSearch如何标记文档是可以配置的。

可以使用不同的ElasticSearch分析器-从允许您支持非英语语言搜索的语言分析器到雪球分析器,后者将一个单词转换成其词根(或词根,并且从词创建词根的过程称为词干),产生一个更简单的令牌。 例如,“柠檬”雪球将是“柠檬”。 或者,如果在经过雪球分析的文档中使用了“敲门”和“敲门”一词,则两个词都将以“敲门”为词干。

您可以通过索引映射API更改文档的标记方式,如下所示:

使用cURL更改索引的映射

curl -XPUT 'http://localhost:9200/beer_recipes' -d '{ "mappings" : {"beer" : {"properties" : {"ingredients" : { "type" : "string", "analyzer" : "snowball" }}}}
}'

请注意,上面的映射如何指定将通过雪球分析器分析ingredients字段。 另请注意,开始向其中添加文档之前,您必须更改索引的映射! 因此,在这种情况下,我需要删除索引,运行上面的映射调用,然后重新添加这两个配方。

现在,我可以开始在配方中搜索“柠檬”或“柠檬”成分。

现在搜索柠檬有效!

query = { "query" : { "term" : { "ingredients" : "lemon" } } }client.search('beer_recipes', 'beer', query).on('data', (data) ->data = JSON.parse(data)for doc in data.hits.hitsconsole.log doc._source.styleconsole.log doc._source.nameconsole.log doc._source.ingredients
).exec()

请记住,滚雪球可能会无意间使搜索结果的相关性降低。 可以将长词变成更常见但完全不同的词。 例如,如果您将包含单词“ sextant”的文档滚雪球,则单词“ sex”将作为词干。 因此,搜索“ sextant”还将返回包含“ sex”一词的文档(反之亦然)。

ElasticSearch为您提供了强大的搜索引擎; 另外,略微考虑了如何分析文档的内容,您将使搜索事件更加相关。

参考: The Disco Blog博客中的JCG合作伙伴Andrew Glover了解ElasticSearch Analyzers 。

翻译自: https://www.javacodegeeks.com/2013/09/understanding-elasticsearch-analyzers.html

es分词器错误分析

es分词器错误分析_了解ElasticSearch分析器相关推荐

  1. ElasticSearch入门:ES分词器与自定义分词器

    ES入门:ES分词器与自定义分词器 分词器的简单介绍 不同分词器的效果对比 自定义分词器的应用 分词器的简单介绍 分词器是es中的一个组件,通俗意义上理解,就是将一段文本按照一定的逻辑,分析成多个词语 ...

  2. 【ES实战】ES分词器介绍

    文章目录 ES分词器介绍 什么是分词器 分词器的组成 Character filters Tokenizers Token filters 分词的过程 写入时分词 搜索时分词 测试分词效果 分词器的分 ...

  3. ES学习(五)同义词分词器dynamic synonym for ElasticSearch

    dynamic synonym for ElasticSearch elasticsearch动态同义词插件是添加一个同义词过滤器在给定间隔(默认60秒)来重新加载同义词文件(本地文件或远程文件). ...

  4. 【javaWeb微服务架构项目——乐优商城day07】——Elasticsearch介绍和安装及使用(安装kibana,安装ik分词器,Spring Data Elasticsearch,高级查询)

    文章目录 0.学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1.Elastic 1.1.2.Elasticsearch 1.1.3.版本 1.2.安装和配置 1.2.1.新 ...

  5. es重建字段类型_关于elasticsearch中更新数据的几种方式

    作为一个成熟的框架,Elasticsearch里面提供了丰富的操作数据的api,本篇我们就来学习一下在es中更新数据的几种方式. (一)更新文档 (1)部分更新: java api: ` HashMa ...

  6. es集群搭建_滴滴Elasticsearch 集群跨版本升级与平台重构之路

    前不久,滴滴ES团队将维护的30多个ES集群,3500多个ES节点,8PB的数据,从2.3.3跨大版本无缝升级到6.6.1.在对用户查询写入基本零影响和改动的前提下,解决了ES跨大版本协议不兼容.文件 ...

  7. es统计mysql 报表_用Elasticsearch实现统计排行榜

    前几天在论坛看见有人针对es提了几个问题,觉得很有意思就查找资料测试了下,很有意思,写下来跟大家一起分享一下 功能就是标题描述的,关于es聚合查询(aggregations) 官文: 聚合框架有助于基 ...

  8. Elasticsearch在docker下安装运行,ES查询、分词器

    目录 Elasticsearch的一点背景 数据输入 数据输出 集群 集群灾备 集群管理 Docker容器中运行ElasticSearch.Kibana.cerebro ElasticSearch K ...

  9. datetimepicker中文不生效_搜索引擎技术(二十)- elasticsearch - 中文分词器

    步骤1:分词器概念 步骤2:安装中文分词器步骤3:重启 ElasticSearch步骤4:测试中文分词效果 步骤 1 : 分词器概念 分词器指的是搜索引擎如何使用关键字进行匹配,如 入门 中的关键字: ...

最新文章

  1. R语言实战应用-lightgbm 算法优化:不平衡二分类问题(附代码)
  2. RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣
  3. ICML 2021 | AlphaNet:基于α-散度的超网络训练方法
  4. C++ 标准输入输出流
  5. No changes detected解决方案
  6. 有意思的select~
  7. 读取扫码枪输入_为何超市“扫码枪”这么强?不输密码钱就没了,现在知道还不晚...
  8. HttpNotificationChannel 云端推送信息实现
  9. render java_render 实现v-model
  10. Qt窗口部件——QFrame/QAbstractButton/QLineEdit/QAbstractSpinBox/QAbstractSlider
  11. 07-08软工升本考试原题——SQL与关系代数
  12. jsp实验管理系统开题报告_MR教育燧光与广东实验中学关于MR化学课程开题报告研讨会顺利完成...
  13. Windows程序设计:使用VS2010创建窗口程序
  14. thymeleaf 默认选中下拉框(select option)
  15. iPhone加码“独立王国” 有可能成摆设?
  16. CAPM模型通俗透彻理解(资本资产定价模型)
  17. 计算机系统文件夹打不开,电脑系统的文件夹打不开可以试下这两个办法
  18. CS:APP CH02信息的表示和处理知识点总结
  19. oracle open_cursors未关闭问题解决
  20. 国产服务器软件 LinWinHttp 重大更新 V1.3 Community Build 2022.10.29 发布,这次的更新有什么内容?

热门文章

  1. SCOM Logical Disk Free Space Monitor
  2. 还有王法吗?美国联邦调查局开发人脸识别系统,数据源涉及公民隐私
  3. Python 传值和传址 copy/deepcopy
  4. JS获取当前对象大小以及屏幕分辨率等...
  5. cronolog apache 日志分割
  6. IIS 7上安装SQL SERVER 2005报表服务可能导致不能正常连接
  7. jenkins rec cve-2019-1003000 复现
  8. 数字货币 如何验证Electron Cash钱包 软件来源的可靠性
  9. python3 pip 报错 pip is configured with locations that require TLS/SSL
  10. golang web 框架 gin beego iris 对比