ElasticsearchCRUD使用(十一)【Elasticsearch同义词分析器】

es搜索同义词近义词技术方案 方案一: 使用同义词文件,在es索引中定义"synonyms_path",并设置updateable为true动态更新同义词,但这个需要运维一起配合,当有新增的同义词时候,也需要运维帮我们添加进这个文件中,维护比较不方便 PUT /myIndex { "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "updatea 阅读详情

本文介绍如何使用ElasticsearchCRUD在Elasticsearch中设置和使用自定义分析器。 创建具有自定义同义词词元过滤器的分析器并将其添加到索引中。 如果您搜索任何同义词,您将找到所有可能的文本的所有匹配。

创建自定义同义词分析器

在ElasticsearchCRUD中使用自定义分析器,过滤器或分词器创建索引非常简单。 强类型的类配置可用于所有类型以及所有默认可能性的常量定义。 在下面的示例中,创建SynonymTokenFilter并将其添加到自定义分析器。 然后将其与其他配置一起包含在索引映射中。

new IndexDefinition
{
    IndexSettings =
    {
        Analysis = new Analysis
        {
            Analyzer =
            {
                Analyzers = new List<AnalyzerBase>
                {
                    new CustomAnalyzer("john_analyzer")
                    {
                        Tokenizer = DefaultTokenizers.Whitespace,
                        Filter = new List<string> {DefaultTokenFilters.Lowercase, "john_synonym"}
                    }
                }
            },
            Filters =
            {
                CustomFilters = new List<AnalysisFilterBase>
                {
                    new SynonymTokenFilter("john_synonym")
                    {
                        Synonyms = new List<string>
                        {
                            "sean  => john, sean, séan",
                            "séan => john, sean, séan",
                            "johny => john",
                        }
                    }
                }
            }
        },
        NumberOfShards = 3,
        NumberOfReplicas = 1
    },
};

索引设置在Elasticsearch中创建如下:

http://localhost:9200/_settings

这里写图片描述

创建anaylzed和non-analyzed的映射

现在,使用Member类来为member 类型创建映射来映射此。Name属性使用自定义分析器,并使用Fields配置将原始文本保存在non-analyzed的字段中。

public class Member
{
    public long Id { get; set; }

    [ElasticsearchString(Index = StringIndex.analyzed, Analyzer="john_analyzer", Fields = typeof(FieldDataDefinition))]
    public string Name { get; set; }

    public string FamilyName { get; set; }

    public string Info { get; set; }
}


public class FieldDataDefinition
{
    [ElasticsearchString(Index=StringIndex.not_analyzed)]
    public string Raw { get; set; }
}

具有映射和设置的索引使用以下方法创建:

_context.IndexCreate<Member>(indexDefinition);

然后创建如下:

http://localhost:9200/_mapping

这里写图片描述

添加一些数据

现在可以使用bulk 插入将一些数据添加到索引

public void CreateSomeMembers()
{
    var jm = new Member {Id = 1, FamilyName = "Moore", Info = "In the club since 1976", Name = "John"};
    _context.AddUpdateDocument(jm, jm.Id);
    var jj = new Member { Id = 2, FamilyName = "Jones", Info = "A great help for the background staff", Name = "Johny" };
    _context.AddUpdateDocument(jj, jj.Id);
    var pm = new Member { Id = 3, FamilyName = "Murphy", Info = "Likes to take control", Name = "Paul" };
    _context.AddUpdateDocument(pm, pm.Id);
    var sm = new Member { Id = 4, FamilyName = "McGurk", Info = "Fresh and fit", Name = "Séan" };
    _context.AddUpdateDocument(sm, sm.Id);
    var sob = new Member { Id = 5, FamilyName = "O'Brien", Info = "Not much use, bit of a problem", Name = "Sean" };
    _context.AddUpdateDocument(sob, sob.Id);
    var tmc = new Member { Id = 5, FamilyName = "McCauley", Info = "Couldn't ask for anyone better", Name = "Tadhg" };
    _context.AddUpdateDocument(tmc, tmc.Id);

    _context.SaveChanges();
}

使用analyzed数据进行搜索

可以使用查询匹配搜索数据,因为我们要搜索分析的字段。 如果您搜索sean,séan,Sean,Séan,John,Johny,将会找到所有的john结果。

//{
//  "query": {
//      "match": {"name": "sean"}
//   }
//  }
//}
public SearchResult<Member> Search(string name)
{
    var query = "{ \"query\": { \"match\": {\"name\": \""+ name + "\"} }  } }";
    return _context.Search<Member>(query).PayloadResult;
}

请求发送如下:

POST http://localhost:9200/members/member/_search HTTP/1.1

Content-Type: application/json
Host: localhost:9200
Content-Length: 46
Expect: 100-continue
Connection: Keep-Alive

{ "query": { "match": {"name": "Johny"} }  } }

您还可以使用_analyze API检查分析的词条

http://localhost:9200/members/_analyze?&analyzer=john_analyzer
【ElasticSearch】ElasticSearch 7.8 IK 同义词 配置 1.概述 本章是7.8版本的es如何创建同义词 近义词配置: [lcc@lcc ~]$ vi /Users/lcc/soft/es/elasticsearch-7.8.0/config/analysis/tjdata-shop-synonym.txt 搜房,房天下 成交均价,成交单价,房价,售价 保障房,经济适用房,配套商品房,动迁房,廉租房 出租,租赁 买卖,销售 克而瑞,CRAC 1、新建索引 PUT /test_002 { "settings": { "index": { . 阅读详情

相关推荐

PCIe-4.2.3.2 Processing of Ordered Sets During Flit Mode Data Stream

动态门控检测(Gated Detection):绝不能在非预定时钟周期进行全时段 OS 匹配。这能节省大量动态功耗。并行容错比较器:必须实现 64-bit 宽的容错匹配器(5/8 表决),这对时序(Timing)要求较高,需要考虑多级流水线(Pipeline)设计。变长状态机(Variable Length FSM):SKP 子状态机必须具有Count_8B计数器,并且要有上限强退保护(Max Count = 6)。控制信号广播。

weixin_44700185的博客 29

elasticsearch 使用同义词

elasticsearch 使用同义词 使用环境 elasticsearch5.1.1 kibana5.1.1 同义词插件5.1.1 安装插件 下载对应的elasticsearch-analysis-dynamic-synonym-5.1.1.zip, 解压到本地的elasticsearch/plugins目录下, 重新启动es 第一种方式本地文件 说明: 对于本地文件:主要通过文件的修改时...

weixin_30631587的博客 649

BCIC IV 2a数据集:从下载到实战应用全解析

本文全面解析了BCI Competition IV 2a(BCIC IV 2a)数据集的应用流程。从官方渠道下载数据、解析其结构,到在MATLAB和Python环境中进行数据导入、预处理(包括处理特殊受试者A04T),并详细演示了从特征提取(如CSP)到分类(如LDA、SVM)的完整实战步骤,为脑机接口研究者提供了从入门到实践的清晰指南。

weixin_28235513的博客 972

ES-同词义配置

语主相近或相同品牌类目关联搜索它等于搜索它增加analysis,处定义分词器修改name的分词器PUT /shop},},},

免费无法个性化定制 1660

从零构建锂电池主动均衡系统:Simulink仿真中的Buck-Boost拓扑实战指南

本文详细介绍了如何在Simulink中从零构建基于Buck-Boost拓扑的锂电池主动均衡系统。通过仿真环境搭建、参数优化、控制策略设计和性能评估,为工程师提供了完整的实战指南,帮助快速验证和优化均衡算法,提升电池组一致性与寿命。

gitlab7runner的博客 895

软件测试学习笔记(二)图覆盖

软件测试学习笔记(二)图覆盖 课程链接软件测试_中国大学MOOC 2.1 测试中的图 2.2 图覆盖准则 1、什么是图? 点的集合和边的集合。点或者结点,有穷非空的集合。边是点对。 2、图为什么在软件测试中具有重要地位? 所谓软件测试就是将软件变作一张图,然后覆盖它,不仅仅是软件,图更是计算机科学重要的结构。 3、软件测试中的图是如何得到的? 常见的图可以来自源代码,常见的是控制流图,还有各种各样...

DZFinder的博客 1420

BaiduPCS-Go:命令行百度网盘客户端,高效管理云存储的技术解决方案

还在为百度网盘的网页端操作繁琐而烦恼?还在寻找能够批量处理网盘文件的高效工具?BaiduPCS-Go 是一款基于 Go 语言开发的命令行百度网盘客户端,为开发者和技术用户提供了强大的云存储管理能力。本文将从技术角度深入解析如何利用 BaiduPCS-Go 实现自动化文件管理、多账号切换和高效数据传输,帮助你在命令行环境中轻松驾驭百度网盘。 ## 一、为什么需要命令行网盘工具? ### 1.1

gitblog_00539的博客 577

SAP 批次管理(分割评估)

批次分割评估: 业务场景:企业要求各批次物料成本价格不一样。此时可以采用分割批次来实现不同成本 后台配置: (1)、激活分割评估 后台---物料管理----评估与科目设置---分割评估-----激活分割评估 (2)、配置分割评估 后台---物料管理----评估与科目设置---分割评估-----配置分割评估 进入全局性分类后,批次分割采用已有的评估类型“X自动(批)”: ...

willieyuan的博客 1万+

Elasticsearch 分析器的高级用法一(同义词,高亮搜索)

在搜索场景中,同义词用来处理不同的查询词,有可能是想表达相同的搜索目标。例如:查询“北京大学”和“北大”时,其实时想搜索同一个内容。在ES内置的分词过滤器中,有两个同义词分词过滤器(synonym 和 synonym_graph)synonym_graph 相对于 synonym 对于多词同义词有更精确的效果官方建议,在索引时使用 synonym ,在 查询时 使用 synonym_graph。

RwTo的博客 1508

Plant Simulation智能行车/天车/起重机建模(1)-基本对象说明

摘要: MultiPortalCrane(多门式起重机)是一种灵活物料搬运设备,适用于造船、钢铁等行业,支持零件预组装、钢板/钢卷智能料场管理及设备装卸。其特点包括: 多门架协同:支持同轨道多门架运行,内置防撞检测; 模块化控制:可独立调节门架、小车及吊钩的速度、加速度和悬臂长度; 多样化搬运:通过目标位置设置或连接器实现零件运输; 故障与统计:可配置MTTR和可用率,实时监控各部件状态。 通过对话框可自定义轨道尺寸、门架数量及运动参数,并支持编程调用(如getPortals方法)。适用于需高精度定位和协同

qq_31964455的博客 312

Centos7 yum 报错「Errno 256」No more mirrors to try 解决方法

首先该问题的出现是由于网络的震荡导致,这是重点。(1)将源更换成阿里云的官方源,步骤参考如上(2)同时将zabbix的官方源更换成阿里云里面的zabbix镜像源,因为zabbix官方源根本网络不通,因为国家防火墙的拦截,导致网络不通。这是阿里源的zabbix镜像地址: https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/修改系统中早期生成的zabbix.repo文件,如下:主要是把baseurl替换成阿里云的zabbix镜像地址即可。

专注基础架构领域 3872

Elasticsearch同义词最佳实践

毫无疑问,使用同义词是搜索工程师工具箱中最重要的技巧之一。尽管新手有时会低估同义词的重要性,但几乎所有搜索系统都离不开它。与此同时,人们有时仍会低估与使用同义词相关的一些复杂情况和微妙情形,甚至高级用户也不例外。 用好同义词库,在搜索的过程中,在提升召回率上,有着奇迹般的力量。 最近正在做同义词库的工作,在提升召回效果方面,确实有很大的贡献。本篇文章中,将会详细讲解如何使用,其中的坑,以及各种玩法的最佳实践。本篇博文还会回答一些有关同义词使用方法的常见问题

Angus 2847

SAP会计凭证导入ABAP开发模板+注意点—附带源码

开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。使用bapi校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。正式创建会计凭证。隐藏的坑。

小九啥也不会 1232

ElasticsearchCRUD翻译系列之(一): ElasticsearchCRUD 介绍

ELASTICSEARCH CRUD .NETPROVIDER 翻译自(原文地址: https://damienbod.com/2014/09/22/elasticsearch-crud-net-provider/) 本文介绍了ElasticsearchCRUD NuGet包的使用。ElasticsearchCRUD便于你通过对实体的插入、删除、修改从Elasticsearch中查找单个记录...

weixin_30284355的博客 66

【26美赛C题】Data With The Stars第三问[影响因素分析模型]思路与代码

本文针对2026美赛C题《Dancing with the Stars》第二问,提出了一套系统的影响因素分析框架。通过多元回归模型和固定效应模型,量化分析了明星特征(年龄、职业等)、舞者搭档和比赛周次对评分的影响,发现评委与观众偏好存在差异。研究采用方差分解评估舞者效应占比,通过最优年龄分析和交互效应检验揭示非线性关系。最后运用差异性检验和结构方程模型(SEM)比较评委与观众偏好,为比赛结果预测和选手优化提供量化依据。该分析框架可系统揭示比赛成绩的关键驱动因素。

一键难忘的博客 756

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

刘刘刘刘 7397

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

一个案例弄懂ElasticSearch分词匹配原理和同义词

基础:ES支持两种同义方式。一种是单向同义词,一种是双向同义词。 臀部,臀,屁股 斑=>斑,雀斑 i-pod,i pod,i pad =>ipod 说明:对于臀部,臀,屁股。我们可以理解成相互完全等价。对于“斑”“雀斑”,如果文章分词后包含“斑”,会自动存入“斑”“雀斑”两个字词,这样搜索斑或者雀斑都会命中该文章。如果使用"i-pod","i pod","i pad"转为"ipod”,那就会出现一个问题就是在因为存储的是"ipod”,所以搜"i pad"就不会命中该文章了。不推荐使用

liuhe2296044的博客 2650

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Elasticsearch:使用同义词 synonyms 来提高搜索效率

在我们的很多情况下,我们希望在搜索时,有时能够使用一个词的同义词来进行搜索,这样我们能搜索出来更多相关的内容。我们可以通过 text analysis 来帮助我们形成同义词。如果大家对 Elastic 的 analyzer 还不是很熟的话,请参阅我之前的文章 “Elasticsearch: analyzer”。文本分析通常应用于你建立索引时的所有文档以及发送给 Elasticsearch 的所有查询。在进行同义词搜索时,我们有如下的几种方案: 在建立索引时 (indexing),通过 analyzer 建

Elastic 中国社区官方博客 9456

Elasticsearch:通过结合 Elasticsearch 词干分析器和同义词来提高搜索相关性

在之前的博客中,我们介绍了如何将同义词合并到由 Elasticsearch 驱动的应用程序中。 在这里,我以该博客为基础,展示了如何结合词干分析器(stemmer)和多词同义词(multi-word synonyms),将搜索结果的质量提升到一个新的水平。 动机 想象一下,你正在使用 Elasticsearch 为搜索应用程序提供搜索引擎以查找书籍,并且在此应用程序中你希望将以下单词视为同义词: brainstorm brainstorming brainstormed brain stor

Elastic 中国社区官方博客 929

ElasticSearch分析和分析器

ElasticSearch分析和分析器 定义多个分词器模板:https://blog.youkuaiyun.com/u014646662/article/details/97272096 使用模板中定义的分词器:https://blog.youkuaiyun.com/u014646662/article/details/98174611 分析(analysis)是这样一个过程: 首先,标记化一个文本块为适用于倒排...

周天祥的博客 3万+

Git:git深入理解及常见问题

Git深入理解及常见问题

netyeaxi的专栏 101

git checkout 与 git switch 的区别

git checkout 与 git switch 的区别

choumin的专栏 187

ES数据库学习系列·学习大纲(目录)

学习方式:每一小节一个 MD 文件,采用「理论讲解 + 动手实践」的方式编写。版本基准:Elasticsearch 8.x(Kibana Dev Tools 语法),涉及 Docker 安装。建议学习路径:按章节顺序学习,每节完成「实践」部分的命令后再进入下一节。

啊渊的专栏 161

Git 从入门到精通(二):创建本地仓库与三大核心区域

本文详解Git本地仓库的创建与核心机制。通过git init初始化仓库,揭示.git目录的结构与重要性;配置用户信息(局部或全局)以标识提交者;深入解析工作区、暂存区、版本库三大区域的协作流程,阐明git add与git commit的本质——前者将变更存入暂存区(索引),后者将其提交至分支并生成对象存储于objects目录。结合HEAD指针与分支指向,理解Git如何高效管理版本历史,为后续操作奠定坚实基础。

weixin_74385491的博客 278

Elasticsearch ingest pipeline 被禁用之后:性能代价、安全治理与数据入库时间的四种替代方案

生产环境为什么禁用 Elasticsearch ingest pipeline?写入路径同步执行的开销、Painless 脚本的安全治理是根因;而 _ingest.timestamp 出不了 pipeline,ES 8/9 也没有原生入库时间字段。本文给出四种替代方案:采集端注入时间戳、bulk 响应后回写、refresh=wait_for 近似、最小 set pipeline 白名单,附选型对比与踩坑清单。

Sayai的专栏 335
上一篇: ElasticsearchCRUD使用(十)【Elasticsearch类型与ElasticsearchCRUD的映射】
下一篇: ElasticsearchCRUD使用(十二)【Elasticsearch的German分析器】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值