首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在elasticsearch中匹配比max_gram更长的字符串?

在elasticsearch中,匹配比max_gram更长的字符串有以下几个原因:

  1. 精确匹配:max_gram是elasticsearch中的一个分词器参数,用于将输入的文本进行分词处理。它指定了分词器将输入文本切分成的最大长度。如果要匹配比max_gram更长的字符串,意味着希望进行精确匹配,而不是将文本切分成较短的片段进行匹配。
  2. 长文本查询:在某些场景下,可能需要对较长的文本进行查询,例如搜索引擎中的全文搜索。如果限制了max_gram的长度,可能会导致较长的文本被切分成多个片段,从而影响查询的准确性和性能。
  3. 特定需求:有些特定的业务需求可能需要匹配比max_gram更长的字符串。例如,某些应用场景中需要对长文本进行关键词提取或者文本摘要生成,此时需要保留原始的长字符串进行处理。

对于以上需求,elasticsearch提供了多种解决方案:

  1. 使用keyword类型:可以将字段的类型设置为keyword,这样elasticsearch将不会对该字段进行分词处理,而是将整个字符串作为一个整体进行匹配。这适用于需要精确匹配或者查询长文本的场景。
  2. 使用match_phrase查询:match_phrase查询可以用于匹配包含指定短语的文档,而不是仅仅匹配单个词项。通过将查询字符串设置为需要匹配的长字符串,可以实现对比max_gram更长的字符串进行匹配。
  3. 自定义分词器:如果需要更灵活地控制分词过程,可以自定义分词器。通过自定义分词器,可以根据具体需求对文本进行切分,从而满足对比max_gram更长的字符串进行匹配的需求。

腾讯云提供了Elasticsearch服务,用于构建和管理全文搜索引擎。您可以通过腾讯云Elasticsearch服务来实现对比max_gram更长的字符串进行匹配的需求。详情请参考腾讯云Elasticsearch产品介绍:https://cloud.tencent.com/product/es

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Elasticsearch能检索出来,但不能正确高亮怎么办?

死磕Elasticsearch技术微信群 2、一个Demo描述清楚问题 注:本文示例DSL在7.2版本运行ok,6.X之前早期版本可能需要微调。...如上的示例中代表:保留数字、字母。若上述示例中,只指定 "letter",则数字就会被过滤掉,分词结果只剩下串中的字符如:"OF"。...5、选型注意 Ngram的本质:用空间换时间。其能匹配的前提是写入的时候已经按照:min_gram、max_gram切词。 数据量非常少且不要求子串高亮,可以考虑keyword。...Wood大叔也 多次强调:wildcard query应杜绝使用通配符打头,实在不得已要这么做,就一定需要限制用户输入的字符串长度。...6、小结 为讨论解决线上问题,引申出Ngram的原理和使用逻辑,并指出了wildcard和Ngram的适用业务场景。希望对实战中的你有所启发和帮助! 你在业务中遇到子串匹配和高亮的情况吗?

3.7K20

一起学Elasticsearch系列-模糊搜索

本文字数:3668字,阅读大约需要 10 分钟 在 Elasticsearch 中,模糊搜索是一种近似匹配的搜索方式。它允许找到与搜索词项相似但不完全相等的文档。...前缀匹配:prefix 前缀匹配通过指定一个前缀值,搜索并匹配索引中指定字段的文档,找出那些以该前缀开头的结果。 在 Elasticsearch 中,可以使用 prefix 查询来执行前缀搜索。...,其中 * 表示匹配任意数量(包括零个)的字符,而 ? 则表示匹配一个字符。 在通配符搜索中,可以在搜索词中使用通配符字符,将其替换为要匹配的任意字符或字符序列。...语法: 在正则表达式匹配的查询中,flags 参数是一个字符串,它可以包含多个选项,并用逗号分隔。每个选项都由一个字母表示。...match_phrase_prefix 查询是一种结合了短语匹配和前缀匹配的查询方式。它用于在某个字段中匹配包含指定短语前缀的文档。

68410
  • 触类旁通Elasticsearch:分析

    《Elasticsearch In Action》学习笔记。 一、什么是分析 分析(analysis)是在文档被发送并加入倒排索引之前,ES在其主体上进行的操作。...搜索在索引中执行之前,根据所使用的查询类型,分析同样可以运用到搜索的文本。如match、match_phrase在搜索之前会对文本执行分析步骤,而term和terms则不会。...二、分析文档 有以下两种方式指定字段所使用的分析器: 创建索引时,为特定的索引进行设置。 在ES配置文件中,设置全局分析器。...下面的例子在elasticsearch.yml配置文件中设置分析器。这里的定制分析器和前面的一样,不过是在YAML里设置的。...在“spaghetti”的例子中,如果min_gram为2,max_gram为6,那么将获得如下分词:sp、spa、spag、spagh、spaghe。

    1.4K31

    Elasticsearch 警惕使用 wildcard 检索!然后呢?

    Elasticsearch 中的 wildcard 使用方式如下: ? 通配符运算符是匹配一个或多个字符的占位符。 通配符支持两种: ? : 支持模糊匹配单个字符。举例:Ma?...2、Ik 词典main.dic 非原生,做了互联网词库的扩展,但词库中依然没有“刘强东”三个字。 3、如果你在本地测试结果和文章不一致,极大可能是词典不一样导致的。...在 wood 大叔 2017年的文章中,曾经指出如下的核心点: 4.1 出现问题 用户输入的字符串长度没有做限制,导致首尾通配符中间可能是很长的一个字符串。...源码及细节推荐阅读: https://elasticsearch.cn/article/171 https://elasticsearch.cn/article/186 5、wildcard 实战中的悲剧...6、wildcard 可能的替代方案 在寻求解决方案的时候,我们要先问一下:为什么大家喜欢用 wildcard 实现模糊检索?

    6.3K60

    使用 Elasticsearch 的 NGram 分词器处理模糊匹配

    接到一个任务:用 Elasticsearch 实现搜索银行支行名称的功能。大概就是用户输入一截支行名称或拼音首字母,返回相应的支行名称。...比如,用户输入"工行"或者"gh",我需要返回"工行XXX分行"类似这样的结果。 我心里嘀咕着:数据库不是支持通配符查询吗?为什么不直接用数据库查询? 说归说,但是任务还是要完成的。...之前有在网上看过一篇文章,主要就是说用 Elasticsearch 处理通配符查询不太适合,然后我在评论中看到作者推荐了一个分词器 NGram。...tokenizer": { "ngram_tokenizer": { "type": "ngram", "min_gram": 1, "max_gram...analyzer 被指定为 ngram_analyzer,这个字段的查询就都会变成通配符查询,无论是 term 还是 match。

    2.7K60

    Elasticsearch 警惕使用 wildcard 检索!然后呢?

    类似 Mysql 中的 like 模糊匹配,如下所示: Elasticsearch 中的 wildcard 使用方式如下: 通配符运算符是匹配一个或多个字符的占位符。 通配符支持两种: ?...2、Ik 词典main.dic 非原生,做了互联网词库的扩展,但词库中依然没有“刘强东”三个字。 3、如果你在本地测试结果和文章不一致,极大可能是词典不一样导致的。...如下示例可见一斑: wildcard 检索字段指定的字符数多了以后,会报错如下: 在 wood 大叔 2017年的文章中,曾经指出如下的核心点: 4.1 出现问题 用户输入的字符串长度没有做限制...源码及细节推荐阅读: https://elasticsearch.cn/article/171 https://elasticsearch.cn/article/186 5、wildcard 实战中的悲剧...6、wildcard 可能的替代方案 在寻求解决方案的时候,我们要先问一下:为什么大家喜欢用 wildcard 实现模糊检索?

    1.2K40

    第18篇-用ElasticSearch索引MongoDB,一个简单的自动完成索引项目

    07.Elasticsearch中的映射方式—简洁版教程 08.Elasticsearch中的分析和分析器应用 09.在Elasticsearch中构建自定义分析器 10.Kibana科普-作为Elasticsearhc...那么,为什么我们要麻烦学习像Elastic Search这样的新复杂技术,又为什么要在我们的系统架构中引入新的复杂性呢?让我们看一下MongoDB文本搜索支持以找出原因。...这篇文章的第二个目的是展示如何将现有的MongoDB文档导入到ElasticSearch中的全文索引文档中。同样,自动完成示例很小,因此也可以在一篇文章中进行解释。...例如,可能有一个分析器删除了所谓的停用词,这是非常常见的词,它们不提供任何有用的索引信息,例如 第一个负责在标记字符串之前清理字符串,例如通过剥离HTML标签。...在我们的例子中,我们想索引 fulltext 数据库中的所有文章。

    5.3K00

    由 Elasticsearch 空间换时间的线上问题说开去......

    ——题目来源:死磕Elasticsearch 知识星球https://t.zsxq.com/08rmVBnhA 2、问题释义 大前提:商品码的存储类似之前咱们视频讲过的手机号的存储,传统的分词器(默认的...3、Elasticsearch 空间换时间 啥叫空间换时间,拿当下世界杯的例子一看就明白。 如下解说员说的:“15人才能打赢”。15人比正常的11人远多4人,这就是多了空间,而换取了时间或结果。...Elasticsearch 中 Ngram 分词本质就是空间换时间的方式,以极小的粒度切分文档,空间存储激增、写入速度会受到影响,但换来了检索效率的提升!...那么match_phrase 加上较大的 slop 呢?能搞定吗?! 经反复测验,需要slop 至少设置 52 才可以搞定,如下所示。 为什么呢?为什么是 52 呢?...最大差值的计算方法,比如:分词后的词项“050”,在待检索词中位次为 15, 在源文档“OWBB050C99JER0021001”为67。 差了:67-15=52。

    58910

    Elasticsearch 查询革新:探索 Wildcard 类型的高效模糊匹配策略

    1、背景 在生产使用中,Elasticsearch 除了精确匹配的要求,也会有模糊查询的场景。...为了实现通配符和正则表达式的查询,Ealsticsearch 依赖的 Lucene4.0 会将输入的字符串模式构建成一个DFA (Deterministic Finite Automaton),而带有通配符的...3、wildcard 类型使用详解 Elasticsearch 的 wildcard 字段类型最早在 7.9 版本中引入。...这一新特性主要针对了之前版本中 wildcard 查询的性能问题,提供了更高效的方式来处理通配符和正则表达式的搜索需求。...,官方在推出该字段的时候发布了相关的说明: 新的 wildcard 字段使用以下两种数据结构以这种方式自动加速通配符和正则表达式搜索: 字符串中所有3个字符序列的 n-gram 索引。

    3.6K20

    【腾讯云ES】基于NGram分词ES搜索性能优化实践

    背景在商品搜索场景中,需要根据用户输入关键字严格匹配商品数据,而普通的全文检索方式,诸如:match 或者match_pharse,不一定能达到搜索效果。...关于严格匹配我们很容易就能想到模糊查询,es本身也是能支持模糊查询的:方案选择方案一:模糊查询 wildcard && fuzzy 模糊查询的功能有点类似 mysql 中的 like,可以使用正则表达式的通配符来达到模糊搜索的效果...wildcard 能同时支持 text 和 keyword 两种类型的搜索,但是当输入字符串很长或者搜索数据集很大时,搜索性能很低,原因是ES使用的是基于DFA的文本匹配算法,时间复杂度(M+N),当索引里面的数据量为...在使用过程中我们可以通过自定义分析器,在创建索引或者更新字段类型时,对它配置使用N-gram进行分词,简单且高效。...通过索引模版可以对指定的字段配置ngram分词器,通过 template 中的"match"来指定需要配置的字段,能支持字段类型、字段名、路径、正则等多种匹配条件,也可以配置filter来对分词后token

    3.3K40

    Elasticsearch(五)

    token建立倒排索引,而是将每个分词运用分词过滤器,分词作为输入,输入到分词过滤器中,根据需要进行修改、添加或者是删除,最为常用的分词过滤器小写分词过滤器,这也是为了保证在搜索词条“nosql”的时候可以找回...对这些分析器的设置可以在索引创建时,可以在elasticsearch配置文件中进行配置,还可以在映射中指定某个字段的分析器。..."number_of_replicas":1 }, "mappings":{} }' 在setting中可以对索引的分析进行设置。..."] } } } } }, "mappings":{} }' 在elasticsearch的配置中添加分析器 在索引创建的时候设置分析器...,不需要重启ES就可以修改分析器,但是在es的配置中指定分析器,那么需要重启es后才能使得分析器的修改生效,在elasticsearch.yml中设置分析器。

    49610

    Elasticsearch探索:部分匹配

    如果启用,Elasticsearch会在一个单独的字段中索引2到5个字符之间的前缀。 这使Elasticsearch可以以更大的索引为代价更有效地运行前缀查询。...WITHIN:使用范围字段值完全在查询范围内的文档进行匹配。...例如,下面这些字符串是采用字典序(lexicographically)排序的: 在倒排索引中的词项就是采取字典顺序(lexicographically)排列的,这也是字符串范围可以使用这个顺序来确定的原因...但字符串却并非如此,要想对其使用范围过滤,Elasticsearch 实际上是在为范围内的每个词项都执行 term 过滤器,这会比日期或数字的范围过滤慢许多。...因此如果可以的话,最好在使用正则前,加上匹配的前缀。在正则中如果使用.*?或者+都会降低查询的性能。

    2.2K41

    听说你还没掌握Normalizer的使用方法?

    在 Elasticsearch 中处理字符串类型的数据时,如果我们想把整个字符串作为一个完整的 term 存储,我们通常会将其类型 type 设定为 keyword。...1、Docs写入Elasticsearch时由于 type是 keyword,分词结果为原始字符串; 2、查询 Query 时分词默认是采用和字段写时相同的配置,因此这里也是keyword,因此分词结果也是原始字符...; 3、两边的分词进行匹对,便得出了我们上面的结果。...normalizer,其中filter 类似自定义分词器中的 filter ,但是可用的种类很少,详情大家可以查看官方文档。...文档写入时由于加入了 normalizer,所有的 term都会被做小写处理 查询时搜索词同样采用有 normalizer的配置,因此处理后的 term也是小写的 两边分词匹对,就得到了我们上面的结果

    80340

    Elasticsearch 8.X 有哪些自动补全的检索方式?

    1、自动补全或前缀匹配检索实现效果图 Elasticsearch 能实现自动补全检索的方案很多,可以简单归结为如下几种不同的方案: 方案一:Prefix 前缀匹配检索。..."} {"index":{"_id":6}} {"title":"世杯界16强决赛对阵表"} {"index":{"_id":7}} {"title":"卡塔尔世界杯为什么在冬天"} 2、prefix...支持前缀完成(即匹配从输入开头开始的术语)和中缀完成(即匹配输入中任何位置的术语)的检索。...6、自动补全建议 suggesters 检索 6.1 Elasticsearch suggesters 介绍 Suggesters 是 Elasticsearch 中的高级解决方案,可根据用户的输入的文本返回外观相似的短语...6.2 Elasticsearch completion suggest 用法 创建索引及构造数据如下: 首先,需要在索引中添加一个 suggest 字段。

    1.3K30

    Elasticsearch在日志分析领域应用和运维实践

    通过对词典中单词前缀和后缀的重复利用,压缩存储空间,压缩比率一般在 3~20 倍之间。O( len ( str )) 的查询时间复杂度。范围搜索,前缀搜索比传统的 hashmap 有明显优势。...Logstash优点 提供了大量的用于数据过滤,转换的插件 drop: 丢掉不需要的数据 grok : 正则匹配抓取数据 date : 从数据中解析date属性,用作 Elasticsearch document...单节点配置:每个节点多少索引,多少 shard ,每个 shard 大小控制在多少。 根据总数据量和单节点配置,得出集群总体规模。 单节点,根据经验通常 CPU :Memory的配比是1:4。...Memory : Disk的配比为 1 : 24 。 Elasticsearch heap 的 xmx 设置通常不大于 32g 。...Memory 和 shard 的配比在 1 : 20 ~ 1:25 之间。 每个shard的大小不超过50g 。

    93220

    Elasticsearch在日志分析领域应用和运维实践

    通过对词典中单词前缀和后缀的重复利用,压缩存储空间,压缩比率一般在 3~20 倍之间。O( len ( str )) 的查询时间复杂度。范围搜索,前缀搜索比传统的 hashmap 有明显优势。...Logstash优点 提供了大量的用于数据过滤,转换的插件 drop: 丢掉不需要的数据 grok : 正则匹配抓取数据 date : 从数据中解析date属性,用作 Elasticsearch document...单节点配置:每个节点多少索引,多少 shard ,每个 shard 大小控制在多少。 根据总数据量和单节点配置,得出集群总体规模。 单节点,根据经验通常 CPU :Memory的配比是1:4。...Memory : Disk的配比为 1 : 24 。 Elasticsearch heap 的 xmx 设置通常不大于 32g 。...Memory 和 shard 的配比在 1 : 20 ~ 1:25 之间。 每个shard的大小不超过50g 。

    56020

    第08篇-Elasticsearch中的分析和分析器应

    07.Elasticsearch中的映射方式—简洁版教程 08.Elasticsearch中的分析和分析器应用 另外ES入门,我强烈推荐这篇Elasticsearch权威搭建指南给你,非常想尽的指南手册...介绍 在本系列的第一个博客中,我们看到了在Elasticsearch中对文档建立索引时的反向索引计算,而在第二个博客中,我们看到了Elasticsearch中的映射基础。...1.分析过程说明 为了了解Elasticsearch中的分析过程及其需求,我们需要对 inverted index Elasticsearch中的创建进行更深入的了解。...为了更清楚地理解它,如果输入字符串包含重复出现的拼写错误的单词,而我们需要用正确的单词替换它,那么我们可以使用字符过滤器对此进行相同的处理。...这就是小写令牌过滤器对令牌的作用。 有关Elasticsearch随附的令牌过滤器的列表 在Elasticsearch中,令牌过滤器最常见的用例之一是向单词添加同义词。

    3.1K00

    关于Elasticsearch查找相关的问题汇总(match、match_phrase、query_string和term)

    主要应用场合就是在 Rest High-Level REST client 中接受 json 字符串作为参数。...2.2、elasticsearch大小写无法使用term查询的问题 在 ​ ​Elasticsearch ​​中处理字符串类型的数据时,如果我们想把整个字符串作为一个完整的 term 存储,我们通常会将其类型...原因是elasticsearch在创建倒排索引时,就已经将大写转为小写,而后写入索引。...时由于 ​​type​​是 ​​keyword​​,分词结果为原始字符串 查询 Query 时分词默认是采用和字段写时相同的配置,因此这里也是 ​​keyword​​,因此分词结果也是原始字符 两边的分词进行匹对...文档写入时由于加入了 normalizer,所有的 term都会被做小写处理 查询时搜索词同样采用有 normalizer的配置,因此处理后的 term也是小写的 两边分词匹对,就得到了我们上面的结果

    25510

    Elasticsearch 常用 DSL 简析

    Elasticsearch DSL DSL 即领域特定语言(Domain Specific Language),是指为特定领域设定的专用语言。...使用 Elasticsearch DSL 可以构建复杂的查询条件,在实际操作中最为轻量便捷。以下是主流 ES 版本常用的 DSL 分析。...在查询时,首先分析查询字符串,然后根据分词构建查询对象,最后将结果返回。匹配查询在各版本之间的使用没有差别。...单一匹配查询 以下查询在默认分词器(standard)下,会分为“this”、“is”、“a”、“test”,根据此分词结果构造一个布尔值,当“query”字段中包含任一关键字时,都会返回此条 doc。...this is tencent cloud", "fields": [ "subject", "message" ] } } } term query term 查询会返回字段中包含确切术语的

    2.8K30

    Elasticsearch 的 NGram 分词器使用技巧

    它能根据文本的步长逐步对写入的文本内容进行约束切割; 二、NGram和index-time搜索推荐原理 搜索的时候,不用再根据一个前缀,然后扫描整个倒排索引了,而是简单的拿前缀去倒排索引中匹配即可...官方介绍如下: image.png 链接:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/analysis-ngram-tokenizer.html..."ngram_tokenizer": { "type": "ngram", "min_gram": 1, "max_gram...} 四、NGram分词与Match、Match_phrase的实际使用问题 上面的案例中,我们通过使用配置ngram分词可以正常切词,能够将上面的内容按照最小为1,最大 为5的原则依次去切割组合成不同的词...说到这里,客户还问“不同的数据,搜索词,需要的slop不一致,这个在搜索的代码里,无法指定,也不能通过代码取提前算。

    14.7K182
    领券