设置Elasticsearch N-Gram字分析器的过程

说n-gram是一个大话题,这是轻描淡写的。 进行快速搜索,您会发现自己盯着语言学和语言模型,数据挖掘或特定蛋白质的分解对首次亮相文化的衰落所隐含的信息量。

好吧,我在跟那最后一个开玩笑。 但是,如果您是开发人员,希望使用Elasticsearch在应用程序中进行搜索,那么您很有可能需要以实用的方式使用n-gram分析器来进行某些搜索,并且可能需要一些针对性的信息才能获得您的搜索以期望的方式表现。 在Elasticsearch中使用n-gram搜索可以做的事情有很多可能性。 该博客将使您开始思考如何在搜索中使用它们。

一个例子

首先,让我们在这里缩小一下范围。 在很多情况下,使用n-gram可能是指搜索句子,而您的gram则是指句子中的单词。 但是对于今天,我想集中讨论单个单词的细分。 n元语法世界中的单个单词称为带状疱疹。

让我们进一步缩小自己的范围,假设我们想使用此搜索进行近似匹配。 在应用程序中,要搜索单词(名称,用户名)或类似于单词的数据(电话号码),然后以与搜索单词紧密匹配的形式向搜索者提供更多信息,这并不少见。 在这里,我们还希望部分匹配该单词,而不是总是在前面,也不总是在结尾。

为了便于参考,请假装我们有一个可以按名称查找动物的站点。 也许这是兽医办公室的前线,而该办公室希望首先以宠物的名字进行所有查找。 当然,您可能会发现自己Swift扩大了搜索范围,以包括其他条件,但举个例子,假设该办公室的所有爱狗人士都疯了,必须使用狗的名字。

分析仪

现在让我们考虑一下分析仪的需求。 首先,我们已经知道我们想要某种n-gram。 我们想要部分匹配。 其次,上面我们已经决定要搜索单词内的部分匹配项。 在这种情况下,这将仅在一定程度上,正如我们稍后将看到的那样,但是现在我们可以确定我们需要NGram令牌生成器,而不是仅保留从令牌开头开始保留n-gram的Edge NGram令牌生成器。

ElasticSearch Ngrams允许最小和最大克数。 从最小值开始,我们要匹配多少个名字? 好的,默认值为1,但是由于我们已经在处理单个单词的数据,所以如果我们使用一个字母(一个字母组合),我们肯定会得到太多的结果。 实际上,同样的事情也将适用于二元组。 但是,足够多的人养着三个字母的宠物,我们最好不要走,否则我们可能永远不会在搜索结果中返回名为“ Ace”和“ Rex”的幼犬。 现在我们知道我们的最小克数将是3。 最大克呢? 默认值为2,我们已经超过了最小值。 我们的目标是尽可能多地包含潜在的准确匹配项,但在索引大小存储方面仍然不会发疯。

考虑选择一个过大的数字(例如52),并为3个字符至52个字符之间的所有可能可能性分解名称,您会发现随着数据的增长,这很快就会加起来。 这里有些妥协,因为在某些情况下,您最终可能会排除超出最大语法的数据。

解决此排除问题的方法有两种,一种是包含您的字段的第二个映射并使用其他分析器(例如标准分析器),或者使用第二种映射并受益于精确匹配的速度和准确性字词查询。

在我们的案例中,我们将利用将单独的分析器用于搜索和索引的功能。 我们假设最大值之后的数据与我们的搜索无关,在这种情况下,它极有可能与搜索无关。

因此,这里我们创建索引,然后设置自定义分析器。 关于整体内容,这里的示例将有些简单,但是我希望它们有助于理解。

注意:稍微偏离主题,但是在现实生活中,您将需要以一种更可重用的方式进行操作,例如模板,以便您可以轻松使用别名和版本并更新索引,但是为此例如,我只是展示了卷曲索引创建的最简单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值