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

elasticsearch :使用ngram分析器时避免重复评分

Elasticsearch是一个开源的分布式搜索和分析引擎,它基于Lucene库构建而成。它提供了一个分布式的、多租户的全文搜索引擎,可以快速地存储、搜索和分析大量的数据。

在使用Elasticsearch时,如果使用ngram分析器进行文本分析,可能会导致重复评分的问题。ngram分析器将文本拆分成连续的n个字符片段,并将这些片段作为独立的词汇进行索引。当搜索时,查询词也会被拆分成相同的片段,并与索引中的词汇进行匹配。由于ngram分析器的特性,可能会导致同一个文档中的多个片段与查询词匹配,从而导致重复评分的情况。

为了避免重复评分,可以使用Elasticsearch的去重机制。具体来说,可以通过以下几种方式来解决这个问题:

  1. 使用collapse功能:collapse功能可以将搜索结果按照指定的字段进行分组,并只返回每个分组中的最佳匹配文档。通过将搜索结果按照某个唯一字段进行分组,可以避免返回重复的评分。
  2. 使用inner_hits功能:inner_hits功能可以在查询结果中返回匹配的子文档。通过使用inner_hits功能,可以获取到每个匹配片段的评分,而不需要返回重复的文档。
  3. 使用collapseinner_hits的组合:结合使用collapseinner_hits功能,可以实现同时去重和获取评分的需求。首先使用collapse按照唯一字段进行分组,然后使用inner_hits获取每个分组中的匹配片段及其评分。

需要注意的是,以上解决方案都需要根据具体的业务需求和数据结构进行调整和优化。在实际应用中,可以根据具体情况选择合适的方案来避免重复评分的问题。

关于腾讯云的相关产品和产品介绍链接地址,可以参考以下内容:

  • 腾讯云Elasticsearch:腾讯云提供的托管式Elasticsearch服务,支持快速部署、自动扩缩容、高可用等特性。详情请参考:腾讯云Elasticsearch产品介绍

请注意,以上答案仅供参考,具体的解决方案和产品选择应根据实际需求和情况进行评估和决策。

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

相关·内容

一起学Elasticsearch系列-模糊搜索

Elasticsearch 中,可以使用 prefix 查询来执行前缀搜索。...为了提高性能,应避免使用通配符模式,如 . 或 .?+ 未经前缀或后缀。 flags 正则表达式匹配的 flags 参数用于指定正则表达式的匹配选项。...INTERSECTION:允许使用 && 运算符来定义交集。 INTERVAL:允许使用 {} 来定义重复数量的区间。 NONE:禁用所有选项,相当于不设置 flags 参数。...例如,当用户输入一个搜索短语的前缀,可以使用该查询来获取相关的文档结果。 参数 analyzer:指定何种分析器来对该短语进行分词处理。...通过在查询指定相应的分析器,可以使用这些分词器来进行文本搜索、前缀搜索等操作。

36310

ELK系列(6) - Elasticsearch常用接口

column,对应的column可以作为url参数并配合通配符来使用 GET http://localhost:9200/_cat/indices?...pretty 删除索引 // 删除索引,可以同时删除多个索引,也可以使用通配符或_all,_all是删除所有索引 // 不建议使用通配符或_all,万一误删索引影响较大 DELETE http://localhost...ES在查询依然会查询到分段中这些有删除标志的文件,但是在返回结果时会将其过滤。只有在合并分段,这些文件才会被真正地物理删除,并释放被占用的内存。...ES 6.4 - Analysis 下面的配置自定义了两个分析器,一个是按照指定的字符来分词,一个是ngram分词(就是将一个单词分解成若干个前缀词项,用于前缀搜索,比如将Item分解为I,It,Ite...": { "type": "ngram" } } } } } 将上面定义的分析器用于指定的索引字段中: { "properties": { "fieldA

67420

Elasticsearch自定义分析器订单号搜索

使用edge ngram将每个单词都进行进一步的分词和切分,用切分后的ngram来实现前缀搜索,比如’OD5046240000014238’这样一个订单号会被分解成’O’,’OD’,’OD’,’OD5’...不过我的业务系统中订单号OD5046240000014238(后四位为userid的后四位)用户常常需要使用后面几位去模糊匹配订单列表,需要的分词效果如下. 12345678910 4238 14238...0014238 ... 46240000014238 046240000014238 5046240000014238 D5046240000014238 OD5046240000014238 自定义分析器...创建索引指定分析器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25curl -XPUT -H "Content-Type...解析机制常见用法库 之 Tokenizer常用用法 Elasticsearch - 指定分析器 二十四、Elasticsearch通过ngram分词机制实现搜索推荐

80920

ElasticSearch权威指南:深入搜索(下)

如果这个词也是以 W1 开头,查询跳回到第二步再重复执行,直到下一个词不以 W1 为止。...这也意味着需要同样注意前缀查询存在性能问题,对有很多唯一词的字段执行这些查询可能会消耗非常多的资源,所以要避免使用左通配这样的模式匹配(如: *foo 或 .*foo 这样的正则式)。...我们需要保证倒排索引表中包含边界 n-grams 的每个词,但是我们只想匹配用户输入的完整词组( brown 和 fo ), 可以通过在索引使用 autocomplete 分析器,并在搜索使用 standard..."search_analyzer": "standard" #在搜索使用 standard 分析器只搜索用户输入的词。...Elasticsearch 的 standard 标准分析器( string 字段默认使用)不会移除停用词,因为尽管这些词的重要性很低,但也不是毫无用处。

2.5K22

Elasticsearch(五)

概述 *字符过滤---使用字符过滤器转变字符。 *文本切分为分词---将文本切分为单个或多个分词。 *分词过滤---使用分词过滤器转变每个分词。 *分词索引---将这些分词存储到索引中。...对这些分析器的设置可以在索引创建,可以在elasticsearch配置文件中进行配置,还可以在映射中指定某个字段的分析器。...在索引创建添加分析器 curl -XPOST 'localhost:9200/index' -d ' { "settings":{ "number_of_shards":2,..."] } } } } }, "mappings":{} }' 在elasticsearch的配置中添加分析器 在索引创建的时候设置分析器...,不需要重启ES就可以修改分析器,但是在es的配置中指定分析器,那么需要重启es后才能使得分析器的修改生效,在elasticsearch.yml中设置分析器

48110

ElasticSearch 多种分析器

# ElasticSearch 多种分析器 分析原理 内置分析器 标准分析器 简单分析器 空格分析器 语言分析器 分析器使用场景 测试分析器 指定分析器 IK分词器 自定义分析器 字符过滤器 分词器...Elasticsearch 还附带了可以直接使用的预包装的分析器。...# 标准分析器 标准分析器Elasticsearch 默认使用分析器。...全文查询,理解每个域是如何定义的,因此它们可以做正确的事: 当你查询一个「全文域」,会对查询字符串应用相同的分析器,以产生正确的搜索词条列表 当你查询一个「精确值域」,不会分析查询字符串,而是搜索你指定的精确值...# 指定分析器Elasticsearch 在文档中检测到一个新的字符串域,它会自动设置其为一个「全文字符串域」,并使用「标准分析器」对它进行分析。但是你不希望总是这样。

1K20

Elasticsearch分词:自定义分词器

简介 虽然Elasticsearch带有一些现成的分析器,然而在分析器Elasticsearch真正的强大之处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单元过滤器来创建自定义的分析器...在 分析与分析器 我们说过,一个 分析器 就是在一个包里面组合了三种函数的一个包装器, 三种函数按照顺序被执行: 字符过滤器 官网:https://www.elastic.co/guide/en/elasticsearch...标准 分析器使用的 标准 分词器 把一个字符串根据单词边界分解成单个词条,并且移除掉大部分的标点符号,然而还有其他不同行为的分词器存在。...ngram 和 edge_ngram 词单元过滤器 可以产生 适合用于部分匹配或者自动补全的词单元。 将tokenizer输出的词项进行处理,如:增加,修改,删除。在es中有几个默认的分词过滤器。...,这个分析器可以做到下面的这些事: 使用 html清除 字符过滤器移除HTML部分。

6.7K21

【ES三周年】elasticsearch 其他字段类型详解和范例

此外,在处理大量的二进制数据Elasticsearch 的性能可能会受到影响。因此,在使用二进制类型,请确保您了解其限制,并确保 Elasticsearch 适用于您的用例。...rank_feature 字段的主要优势在于它可以在查询高效地为文档评分Elasticsearch 会在索引预先计算相关的评分数据,从而加快查询性能。...之后,在索引文档Elasticsearch 会自动使用相应的分析器和分词器处理该字段。...它通常与 text 类型字段一起使用,因为这些字段包含实际的文本数据。 分析器:您可以为 token_count 类型指定一个分析器分析器负责将文本拆分为词元。...在默认情况下,Elasticsearch 使用标准分析器。如果需要,可以自定义分析器来满足特定的需求。 需要注意的是,token_count 类型不适用于全文搜索,而主要用于过滤、排序和聚合操作。

3.2K10

ES系列六、ES字段类型及ES内置analyzer分析

独立存储某个字段,在频繁使用某个特殊字段很常用。而且获取独立存储的字段要比从_source中解析快得多,而且额外你还需要从_source中解析出来这个字段,尤其是_source特别大的时候。...禁用这个特性也很方便: 你只需要在定义mapping显式声明字符串字段的类型或者使用一个动态模板(dynamic template)来匹配你所有的字符串字段即可....例如通过下面的dynamic template就可以恢复到在ElasticSearch 2.x中使用的dynamic template的效果: { "match_mapping_type":...如果你要使用第三方的analyzer插件,需要先在配置文件elasticsearch.yml中注册, 下面是配置IkAnalyzer的例子 index: analysis: analyzer...从名字可以看出来,default是索引和搜索用的默认的analyzer,default_index是索引用的默认的analyzer, default_search是查询用的默认analyzer。

2.1K10

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

多个实例和head plugin使用介绍 06.当Elasticsearch进行文档索引,它是怎样工作的?...07.Elasticsearch中的映射方式—简洁版教程 08.Elasticsearch中的分析和分析器应用 09.在Elasticsearch中构建自定义分析器 10.Kibana科普-作为Elasticsearhc....使用Django进行ElasticSearch的简单方法 16.关于Elasticsearch的6件不太明显的事情 17.使用Python的初学者Elasticsearch教程 18.用ElasticSearch...全文搜索为您每天在网站上使用的所有搜索框提供强大的功能,以查找所需的内容。每当您想在Amazon产品数据库中找到该蝙蝠侠手机壳,或者当您在Youtube上搜索玩有激光灯视频的猫。..." } } 如果不这样做,则由于我们使用自定义分析器查询索引,因此 autocomplete 默认情况下它将使用分析器,并使用查询文本的边缘n-gram进行查询。

5.2K00

ElasticSearch权威指南:基础入门(中)

倒排索引 Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。...内置分析器 但是, Elasticsearch还附带了可以直接使用的预包装的分析器。 接下来我们会列出最重要的分析器。...标准分析器Elasticsearch默认使用分析器。...analyzed 字符串域,用 analyzer 属性指定在搜索和索引使用分析器。...当使用于查询情况,查询就变成了一个“评分”的查询。和不评分的查询类似,也要去判断这个文档是否匹配,同时它还需要判断这个文档匹配的有多好(匹配程度如何)。

5.6K41

深入理解Elasticsearch的索引映射(mapping)

以下是Elasticsearch中一些常见的字段类型及其用途的详细介绍: 1.1 text 类型 用途:用于全文搜索,即当需要对字段内容进行分词、建立倒排索引,并执行相关度评分查询,应使用text类型...2.5 norms 用途:norms存储了字段长度的归一化因子和索引词项的权重,用于评分计算。禁用norms可以节省磁盘空间,但会导致无法执行基于词频和文档长度的相关性评分。...2.6 analyzer 和search_analyzer 用途:这些选项用于指定在索引和搜索应用于字段的分析器分析器负责将文本拆分为词项并转换为小写(可选),以便进行索引和搜索。...因此,如果需要跨多个字段进行搜索,请使用multi_match查询。 5. 动态映射 当向Elasticsearch索引中插入未在映射中明确定义的字段,动态映射会自动推断字段的类型。...三、设置与优化建议 明确定义字段类型:避免使用动态映射带来的不确定性,明确指定每个字段的类型和索引选项。这将确保数据的准确性和一致性,并提高查询性能。

32410

ElasticSearch权威指南:深入搜索(上)

增量使用计数:Elasticsearch 能够缓存非评分查询从而获取更快的访问,但是它也会不太聪明地缓存一些使用极少的东西。...非评分计算因为倒排索引已经足够快了,所以我们只想缓存那些我们 知道 在将来会被再次使用的查询,以避免资源的浪费。 为了实现以上设想,Elasticsearch 会为每个索引跟踪保留查询使用的历史状态。...当我们索引新文档,只需将那些新文档加入已有 bitset,而不是对整个缓存一遍又一遍的重复计算。和系统其他部分一样,过滤器是实时的,我们无需担心缓存过期问题。 1....Elasticsearch 会按照以下顺序依次处理,直到它找到能够使用分析器。...,否则 字段映射里定义的analyzer ,否则 索引设置中名为default 的分析器,默认为standard 标准分析器 有时,在索引和搜索使用不同的分析器是合理的。

4K31

Elasticsearch 搜索应用实践(搭建篇)

不过增加记录没有 ES auto id 快,因为自定义 ID 需要做一次重复检测。 搜索字段指的是需要被全文搜索的字段,例如标题,摘要,内容,标签名等。...四、ES索引 ES 索引的 Mappings 配置只有两点需要注意 使用 text 数据类型 需要被搜索的字段,字段类型要设置为 text,这样字段才会被分析器处理。...Analyzer 要灵活设置 分析器分为两种,一个是写入数据使用  `analyzer`  关键字配置,还有一个是搜索用来分析搜索关键词的使用 `search_analyzer` 来配置。...索引,为了提供索引的覆盖范围,通常会采用 ik_max_word 分析器,会以最细粒度分词索引,搜索为了提高索引的准确度,会采用ik_smart分析器,会以粗粒度分词,示例如下: ?...有个技巧,当某些字段是高质量并且严谨的词语或者短语,比如标签字段,可以两个都使用ik_smart分析器,例如有如下文档: ?

1K20

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

方案三:更细粒度的 ngram 分词间接解决前缀匹配检索。 方案四:Search as your type 类型。 方案五:Completion Suggest 自动补全。...这几个字段的最终检索结果基于 most_fields 方式求和得到总的评分。 实际业务层面根据需要选择字段即可。...Suggesters 可以实现类似:检索提示、用户搜索词联想或校验等功能。 相比于前四种实现方式,这种方式“根正苗红”,更加的适合实现企业级的自动补全检索。...input 代表补全建议的文本信息;weight 代表权重,权值越大,计算的评分越高;反之,则相反。..."prefix": "世界", "completion": { "field": "suggest" } } } } 我们推荐结果有重复数据

1.1K30

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

例如:使用 match api ,基于 ik_max_word 分词方式对“白色死神”进行分词后,搜索"白色"、"死神"能搜索到,而根据 "白" 进行搜索,结果确为空。...wildcard 能同时支持 text 和 keyword 两种类型的搜索,但是当输入字符串很长或者搜索数据集很大,搜索性能很低,原因是ES使用的是基于DFA的文本匹配算法,时间复杂度(M+N),当索引里面的数据量为...在使用过程中我们可以通过自定义分析器,在创建索引或者更新字段类型,对它配置使用N-gram进行分词,简单且高效。...具体使用方式可以参考:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/dynamic-templates.htmlPUT _index_template...使用 wildcard 不需要做分词,不需要额外占用磁盘,但数据量大搜索性能很差,小规模业务可以使用。2.

2.8K40

Elasticsearch探索:Suggester API(一)

用户输入的 “lucen” 是一个错误的拼写会到 指定的字段 “body” 上搜索,当无法搜索到结果(missing),返回建议的词。...随后,多个generator 对这个term的打分进行组合评分。 当前仅支持一种类型的generator:direct_generator。...pre_filter和post_filter选项接受普通的分析器名称。...analyzer:使用索引分析器,默认为简单 search_analyzer:使用的搜索分析器,默认为分析器的值 preserve_separators:保留分隔符,默认为true。...此限制仅在索引使用,以减少每个输入字符串的字符总数,以防止大量输入膨胀底层数据结构。 大多数用例不会受默认值的影响,因为前缀完成很少超过前缀长度超过少数几个字符。

5.1K23

十九种Elasticsearch字符串搜索方式终极介绍

相关性的计算是比较复杂的,详细的文档可以看这两篇博客——什么是相关性和ElasticSearch 使用教程之_score(评分)介绍,我这里只是做一个简单的介绍。...在复合查询里面,比如bool查询,每个子查询计算出来的评分会根据特定的公式合并到综合评分里面,最后根据这个综合评分来排序。...这个评分系统一般是系统默认的,我们可以根据需要定制化我们自己的相关性计算方法,比如通过脚本自定义评分分析器 分析器是针对text字段进行文本分析的工具。...自带了一个分析器,是系统默认的标准分析器使用标准分词器,大多数情况下都能够有不错的分析效果。...:匹配任何单一的字符 *:匹配0个或者多个字符 在进行wildcard搜索的时候最好避免在检索词的开头使用*或者?,这会降低搜索性能。

1.1K10

为什么Elasticsearch查询变得这么慢了?

3、开发维度—Elasticsearch的查询原理 现在我们已经确定了一个很慢的查询,我们通过一个分析器profile来运行它。 但是,查看单个组件时间结果并未使搜索速度更快。 怎么办?...4、开发维度—filter过滤器查询优化 结果分数是Elasticsearch的关键。 通常,当您使用搜索引擎,您需要最准确的结果。 例如,如果您正在搜索“苹果”,您不希望结果包括“苹果手机”。...使用过滤查询,结合使用布尔匹配,您可以在评分之前搜索包含X的所有文档,或者不包含Y的所有文档。此外,可以filter是可以被缓存的。...filter原理推荐阅读:吃透 | Elasticsearch filter和query的不同 5、开发维度——其他优化 5.1 避免使用script查询 避免使用脚本查询来计算匹配。...最好换一种实现方式,通过在index time做文章,选用合适的分词器,比如nGram tokenizer预处理数据,然后使用更廉价的term query来实现同等的模糊搜索功能。

17K31

Elasticsearch 默认分词器和中分分词器之间的比较及使用方法

) 下载地址:https://github.com/bosondata/elasticsearch-analysis-bosonnlp 如何使用: 运行 ElasticSearch 之前需要在 config...文件夹中修改 elasticsearch.yml 来定义使用玻森中文分析器,并填写玻森 API_TOKEN 以及玻森分词 API 的地址,即在该文件结尾处添加: index: analysis:...带有一些现成的分析器,然而在分析器Elasticsearch真正的强大之处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单元过滤器来创建自定义的分析器。...标准 分析器使用的 标准 分词器 把一个字符串根据单词边界分解成单个词条,并且移除掉大部分的标点符号,然而还有其他不同行为的分词器存在。...ngram 和 edge_ngram 词单元过滤器 可以产生 适合用于部分匹配或者自动补全的词单元。

3.3K20
领券