elasticsearch
树叶要走风怎么挽留
六块腹肌的程序员小哥哥
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
elasticsearch 去重查询并进行分页
去重查询的俩种方式:在进行去重查询时,原来的目的是对于查询出的结果中一模一样的数据进行去重,但是各种百度发现都是对于单一字段的去重查询,最后索性新增了一个字段,将其他字段拼接了起来,从而根据拼接的字段进行去重查询1.使用字段聚合+top_hits聚合方式dsl:GET sjck_personnel/_search{ "size": 0, "aggs": { "query_agg": { "terms": { "field": "concat_field原创 2020-08-21 14:46:33 · 5769 阅读 · 3 评论 -
elasticsearch对身份证号码的处理(ngarm分词或者pipeline)
在项目中,手机号和身份证号码考虑都是为数字(身份证号码可能有X),所以都设置为了keyword字段因为项目需要,需要对已经存入数据库的上亿条数据中的手机号和身份证号进行处理,对于身份证号码或手机能够分词项目中之前使用的为IK分次器,所以不会处理数字。下面是后来做出的一些解决方案,各有优缺点。方案1:使用ngram分词方式,对手机号身份证号进行分词重新导入数据或者reindex。优点:能够查询出来的数据结果更多缺点:数据冗余多具体实现Demo:DELETE user_indexGET原创 2020-07-10 09:35:40 · 2820 阅读 · 0 评论 -
通过elasticsearch进行筛选高级查询
项目要求:客户可以筛选不同的index 并且可以进行多条条件的筛选。刚开始,一开始对于需求不够明确,认为搜索条件中的 第四个条件 “或or且”是针对于当前条件单独的描述。例如,名字等于xxx (且) 且表示当前条件必须成立。但是这样的理解是不正确的。正确的查询:且表示上下俩条数据都必须存在,或表示当前条件可以存在可以不存在。而后,被公司的大哥指点了一番,通过大集合小集合先对条件进行了处理,然后进行查询,完成的高级查询。解决思路:首先以“或”作为条件的分割, 如果在条件列表中,出现了或,则证明或后面原创 2020-07-02 14:37:33 · 1940 阅读 · 0 评论 -
Elasticsearch 数据建模最佳实践 学习
Elasticsearch 数据建模最佳实践建模建议(⼀):如何处理关联关系Object •优先考虑 DenormalizationNested •当数据包含多数值对象(多个演员),同时有查询需求Child/Parent ●关联⽂档更新⾮常频繁时建模建议(⼆): 避免过多字段● ⼀个⽂档中,最好避免⼤量的字段○ 过多的字段数不容易维护○ Mapping 信息保存在 Cluster State 中,数据量过⼤,对集群性能会有影响 (ClusterState 信息需要和所有的节点同步)○ 删原创 2020-06-21 20:54:52 · 247 阅读 · 0 评论 -
elasticsearch数据建模(选择合适的映射关系)
什么是数据建模?● 数据建模(Data modeling), 是创建数据模型的过程○ 数据模型是对真实世界进⾏抽象描述的⼀种⼯具和⽅法,实现对现实世界的映射○ 博客 / 作者 / ⽤户评论○ 三个过程:概念模型 => 逻辑模型 => 数据模型(第三范式)○ 数据模型:结合具体的数据库,在满⾜业务读写性能等需求的前提下,确定最终的定义如何对字段进行建模?字段类型 ==》是否要搜索及分词 ==》是否要聚合及排序 ==》是否要额外的存储字段类型:Text v.s Keyword● T原创 2020-06-21 20:25:09 · 543 阅读 · 0 评论 -
elasticsearch之Painless脚本应用
#########Demo for Painless###############Painless 简介● ⾃ Elasticsearch 5.x 后引⼊,专⻔为 Elasticsearch 设计,扩展了 Java 的语法。 ● 6.0 开始,ES 只⽀持 Painless。Groovy, JavaScript 和 Python 都不再⽀持● Painless ⽀持所有 Java 的数据类型及 Java API ⼦集● Painless Script 具备以下特性○ ⾼性能 / 安全○ ⽀持显示原创 2020-06-21 19:49:34 · 2180 阅读 · 0 评论 -
elasticsearch之Pipeline&Processor(管道处理数据)
###Pipeline & Processor###● Pipeline - 管道会对通过的数据(⽂档),按照顺序进⾏加⼯###● Processor - Elasticsearch 对⼀些加⼯的⾏为进⾏了抽象包装###● Elasticsearch 有很多内置的Processors。也⽀持通过插件的⽅式,实现⾃⼰的 Processorpipeline 就是一组processors我们隔离通过_ingest/pipeline/_simulate API 模拟管道行为,进行测试descri原创 2020-06-21 19:44:09 · 2548 阅读 · 0 评论 -
elasticsearch Update By Query & Reindex API
Update By Query & Reindex API###使⽤场景###● ⼀般在以下⼏种情况时,我们需要重建索引###● 索引的 Mappings ###发⽣变更:字段类型更改,分词器及字典更新###● 索引的 Settings ###发⽣变更:索引的主分⽚数发⽣改变###● 集群内,集群间需要做数据迁移###● Elasticsearch 的内置提供的 API###● Update By Query:在现有索引上重建###● Reindex:在其他索引上重建索引DELET原创 2020-06-21 17:51:35 · 545 阅读 · 0 评论 -
elasticsearch之文档的父子关系
文档的父子关系###Parent / Child###● 对象和 Nested 对象的局限性###● 每次更新,需要重新索引整个对象(包括根对象和嵌套对象)###● ES 提供了类似关系型数据库中 Join 的实现。使⽤ Join 数据类型实现,可以通过维护 Parent###/ Child 的关系,从⽽分离两个对象###● ⽗⽂档和⼦⽂档是两个独⽴的⽂档###● 更新⽗⽂档⽆需重新索引⼦⽂档。⼦⽂档被添加,更新或者删除也不会影响到⽗⽂档和其他的⼦⽂档DELETE my_blogs设置ma原创 2020-06-21 11:59:12 · 831 阅读 · 0 评论 -
elasticsearch Nested Object 嵌套对象映射,查询,以及聚合分析
Elasticsearch 中处理关联关系#● 关系型数据库,⼀般会考虑 Normalize #数据;在 Elasticsearch,往往考虑 #Denormalize 数据#● Denormalize 的好处:读的速度变快 / #⽆需表连接 / ⽆需⾏锁#● Elasticsearch #并不擅⻓处理关联关系。我们⼀般采⽤以下#四种⽅法处理关联#○ 对象类型#○ 嵌套对象(Nested Object)#○ ⽗⼦关联关系(Parent / Child )#○ 应⽤端关联DELETE blog原创 2020-06-21 10:57:19 · 1835 阅读 · 0 评论 -
elasticsearch之聚合的作⽤范围及排序
聚合的作⽤范围及排序es聚合分析的默认作用范围是query的查询结果集同时es还支持以下方式改变聚合的作用范围filter post_filter globalDELETE /employeesPUT /employees/{ "mappings" : { "properties" : { "age" : { "type" : "integer" }, "gender" : { "type原创 2020-06-17 20:54:43 · 479 阅读 · 0 评论 -
Elasticsearch: 权威指南 » 处理人类语言 » 开始处理各种语言 分词学习!****
自定义分词器测试!创建一个索引,并自定义分词器自定义一个分词器,名字为my_custom_analyzer 指定他为自定义分词器(type=custom) 指定他的char_filter 为my_charfilter(自定义产生,会对查询词进行预处理),指定他的分词方式为my_tokenizer(自定义的分词方式),指定一个结果过滤器(会去除调指定不需要的词项)PUT test_index{ "settings": { "analysis": { "analyzer": {原创 2020-06-17 16:24:51 · 205 阅读 · 0 评论 -
Elasticsearch: 权威指南 » 深入搜索 » 控制相关度 学习
###Elasticsearch: 权威指南 » 深入搜索 » 控制相关度 »查询时权重提升 学习多个索引同时进行搜索时,可以通过indices_boost 提升索引权重,wbswxx中索引的文件的权重是2,tlsmz的为3,其他匹配的索引权重为默认值1GET tlsmz,hotel,wbswxx/_search{ "explain": true, "indices_boost": [ { "wbswxx": 2 }, { "tlsmz":3原创 2020-06-17 14:01:23 · 196 阅读 · 0 评论 -
elasticsearch之Pipeline 聚合分析
Pipeline 聚合分析DELETE employeesPUT /employees/_bulk{ "index" : { "_id" : "1" } }{ "name" : "Emma","age":32,"job":"Product Manager","gender":"female","salary":35000 }{ "index" : { "_id" : "2" } }{ "name" : "Underwood","age":41,"job":"Dev Manager","ge原创 2020-06-16 21:24:25 · 622 阅读 · 0 评论 -
elasticsearch Bucket & Metric 聚合分析及嵌套聚合
Bucket & Metric 聚合分析及嵌套聚合DELETE /employeesPUT /employees/{ "mappings" : { "properties" : { "age" : { "type" : "integer" }, "gender" : { "type" : "keyword" }, "job" : { "ty原创 2020-06-16 20:55:41 · 393 阅读 · 0 评论 -
Elasticsearch:权威指南学习之多字段映射
多字段映射 ,指定title为english分词, title.std为standard分词。进行多次索引PUT /my_index{ "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "english", "fields": { "原创 2020-06-15 16:01:50 · 425 阅读 · 0 评论 -
elasticsearch得分设置以及分词器不同层次定义
GET _cat/indicesGET hotel/_searchGET /_search{ "query": { "constant_score": { "filter": { "term": { "lvg_mc": "酒店" } }, "boost": 1.2 } }}DELETE /my_index PUT /my_index{ "settings": { "numbe原创 2020-06-12 17:02:37 · 1195 阅读 · 0 评论 -
elasticsearch分页及遍历不同场景使用方案
####分页也遍历–from size search after scroll #########默认情况下使用 from 和size 进行算分分页会出现深度分页的问题 页数越深,占用内存越多from + size 必须小于10000POST goods/_search{“from”: 0,“size”: 10000,“query”: {“match_all”: {}}}search after 避免深度分页的问题优点:避免深度分页缺点: 只能往下翻 不支持指定页数,只能从头翻原创 2020-06-10 20:52:15 · 280 阅读 · 0 评论 -
游标查询简单学习
游标查询scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价。7.x版本 设置每次查询的获取时间为1m 这个过期时间只需要足够处理当前批数据即可,而不是处理查询结果的所有文档需要的时间。 可以使用_doc 进行排序 可以避免全局排序深度分页滚动请求具有优化功能,可以使排序顺序为时更快_doc。如果要遍历所有文档而不考虑顺序,这是最有效的选择:GET /_search?scroll=1m{ "query": { "matc原创 2020-06-05 11:42:32 · 815 阅读 · 0 评论 -
elasticsearch suggester 学习 以及实际应用的一些方法推荐
##################Suggester#############################elasticsearch suggester 帮助用户在搜索的过程中,进行自动补全或者纠错,通过协助用户输入更加精准的关键词。原理:将输入的文本分解为Token,然后再索引的字典里查找相似的term 并返回根据不同的使⽤场景,Elasticsearch 设计了 4 种类别的 Suggesters###● Term & Phrase Suggester###● Complete原创 2020-06-04 21:36:19 · 503 阅读 · 0 评论 -
elasticsearch之explain的使用
explain查看怎么计算得分的,format将json格式结果转为yaml展示POST tlsmz/_search?format=yaml{ "explain": true, "query": { "bool": { "must": [ { "term": { "fz.keyword": { "value": "南昌西" } }原创 2020-06-03 17:16:05 · 7468 阅读 · 1 评论 -
elasticsearch单字符串多字段查询(Dis Max Query&multi match)
################单字符串多字段查询:Dis Max Query######使⽤ bool 查询实现单字符串多字段查询##● 单字符串多字段查询时,如何在多个字段上进⾏算分##● 复合查询:Disjunction Max Query##● 将评分最⾼的字段评分作为结果返回,满⾜两个字段是竞争关系的场景##● 对最佳字段查询进⾏调优:通过控制 Tie Breaker 参数,引⼊其他字段对算分的⼀些影响DELETE blogsPUT /blogs/_doc/1{ "tit原创 2020-05-31 19:26:55 · 1047 阅读 · 0 评论 -
elasticsearch Query & Filtering 与多字符串多字段查询
################Query & Filtering 与多字符串多字段查询############DELETE productsPOST /products/_bulk{ "index": { "_id": 1 }}{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }{ "index": { "_id": 2 }}{ "price" : 20,"ava原创 2020-05-31 18:02:04 · 432 阅读 · 0 评论 -
搜索的相关性算分
####################搜索的相关性算分##################搜索的相关性—relevance搜索的相关性算分,描述了一个文档和查询语句匹配的程度,es会对每个匹配查询条件的结果进行算分_score打分的本质就是排序。把最符合用户需求的文档排在前面,es5之前。默认的相关性算分采用TF-IDF,现在采用BM25词频TFterm Frequency 英 /ˈfriːkwənsi/ : 检索词在一篇文档中出现的频率 检索词出现的次数除以文档的总字数度量一条查询和结果相关原创 2020-05-31 17:59:13 · 689 阅读 · 0 评论 -
elasticsearch之结构化查询
#################结构化查询#################结构化搜索,是指对结构化数据的搜索 日期、布尔类型和数字都是结构化的ES中的结构化布尔,时间,日期和数字之类的结构化数据,有精确的格式,我们可以对这些格式进行逻辑操作,包括比较数字或时间的范围,或判断俩个值的大小,结构化的文本可以做精确匹配或者部分匹配 term查询/prefix前缀查询结构哈的结果只有是 或 否 俩个值 也可以根据需要,决定是否对结构化搜索进行打分#结构化搜索,精确匹配DELETE products原创 2020-05-31 12:05:54 · 796 阅读 · 0 评论 -
基于词项和基于全文的搜索
################ 基于词项和基于全文的搜索#####################term查询term查询不会对输入的词进行分词批量添加三条测试文档POST /products/_bulk{ "index": { "_id": 1 }}{ "productID" : "XHDK-A-1293-#fJ3","desc":"iPhone" }{ "index": { "_id": 2 }}{ "productID" : "KDKE-B-9947-#kL5","desc":"iP原创 2020-05-31 11:11:32 · 358 阅读 · 0 评论 -
es聚合分析查询
##################es聚合分析查询###################es中聚合的分类 有Bucket aggregation 桶聚合(类似于mysql 的group by 分组查询) 有metric aggregation 数学函数聚合, (类似mysql的聚合函数 max min avg sum等) pipeline aggregation 对其他的聚合结果进行二次聚合 matrik aggregation 支持对多字段的操作并提供一个结果矩阵按照手机品牌进行桶聚合GET go原创 2020-05-30 16:36:06 · 574 阅读 · 0 评论 -
dynamicTemplate&indexTemplate学习
#####################20200527dynamicTemplate&indexTemplate####################es中会有很多的模板,当我们创建新的索引的时候,如果我们之前指定了模板,那么他会按照模板进行对索引的mapping 或者 settings 进行设置,如果我们在创建索引的时候,有自定义设置mapping和settings 那么他就不会使用模板,设置模板可以让我们不必每次创建索引的时候,都指定一下固定的设置创建一个模板,模板名称为templat原创 2020-05-27 22:24:15 · 346 阅读 · 0 评论 -
关于elasticsearch中分词器设置的问题
PUT my_index{ "settings": { "analysis": { "analyzer": { "ik":{ "tokenizer": "ik_smart" } } } }, "mappings": { "properties": { "date" : { "type": "date", "format": "yyyy-MM-dd HH:mm原创 2020-05-26 10:03:27 · 457 阅读 · 0 评论 -
ELK之logstash使用------logstash将txt文本的json数据导入到elasticsearch中
1.数据格式为txt文本的json格式数据,首先需要将数据转换格式为csv格式public static void main(String[] args) throws JSONException, IOException { FileUtils.writeStringToFile(new File("你要导出的文件路径"), Json2Csv("你的json数据"));}public static String Json2Csv(String json) throws JSONEx原创 2020-05-25 19:33:17 · 1150 阅读 · 0 评论 -
elasticsearch 权威指南学习
########################20200525elasticsearch 权威指南学习###############空查询,返回所有的索引下的所有文档GET _search可以通过指定timeout来让数据在指定的时间内返回已经查询到的数据,timeout 不是停止执行查询,它仅仅是告知正在协调的节点返回到目前为止收集的结果并且关闭连接。GET _search?timeout=1ms可以通过,直接索引多个index下的数据GET raven,raven_index/_searc原创 2020-05-25 10:26:53 · 228 阅读 · 0 评论 -
elasticsearch 多字段特性及Mapping中配置自定义Analyzer
多字段特性及Mapping中配置自定义AnalyzerPUT logs/_doc/1{“level”:“DEBUG”}我们在创建索引的时候,可以创建多字段类型,通过多字段类型可以进行一些精确匹配,也可以使用不同的analyzer分词GET /logs/_mappingexact values(keyword) 精确值 full text(text) 全文检索 exact values 就是不需要进行分词character filters 特性过滤(当分词后设置特定 的过滤方式)tokenize原创 2020-05-24 20:24:50 · 976 阅读 · 0 评论 -
Dynamic Mapping 以及Mapping和常见字段类型相关问题
Mapping中的字段一旦设定后,禁止直接修改。因为倒排索引生成后不允许直接修改。需要重新建立新的索引,做reindex操作。类似数据库中的表结构定义,主要作用定义索引下的字段名字定义字段的类型定义倒排索引相关的配置(是否被索引?采用的Analyzer)对新增字段的处理truefalsestrict在object下,支持做dynamic的属性的定义当dynamic mapping映射时。如果映射不满足我们的需求。能否进行修改映射关系,答案是不能直接修改,除非进行reindex 重建索引原创 2020-05-24 20:22:42 · 944 阅读 · 1 评论 -
elasticsearch之dynamic策略
索引相关查看索引的信息GET goods通过settings可以进行设置一些系统参数number_of_replicas 设置副本分片的个数PUT goods/_settings{ "number_of_replicas": 1}dynamic策略。对不存在的字段直接添加数据时会自动识别我们添加的数据类型定制dynamic策略。true:遇到陌生字段 进行dynamic mappingfalse 遇到陌生字段,忽略strict 遇到陌生字段,报错将整体设置为 strict 部原创 2020-05-21 21:51:54 · 1267 阅读 · 0 评论 -
elasticsearch之document创建修改原理演变
elasticsearch之document创建修改原理原创 2020-05-21 21:50:54 · 184 阅读 · 0 评论 -
elasticsearch通过suggest completion 进行搜索补全建议
##########通过suggest completion 进行搜索补全建议############创建索引使用ik分词器 对于keyword字段设置类型为completion分词器为ik分词器的ik_smart 分词的力度小,分出来的词少PUT suggest{ "settings": { "number_of_replicas": 0, "number_of_shards": 1 }, "mappings": { "properties": {原创 2020-05-21 11:03:39 · 1154 阅读 · 0 评论 -
es搜索之fetch phase 获取数据阶段
es搜索之fetch phase 获取数据阶段原创 2020-05-20 21:05:46 · 534 阅读 · 0 评论 -
es搜索之 query phase 查询阶段
es搜索之 query phase 查询阶段原创 2020-05-20 21:05:11 · 526 阅读 · 1 评论 -
elasticsearch之scroll滚动查询
es7版本的时候 可以通过 scroll进行滚动查询滚动查询意思指的是如果获取的数据特别多,那我们可以分批获取数据,给服务器一个处理请求的时间,一次性查询出来数据,分批次进行获取,所以每次进行查询的时候都要传递一个系统的处理时间第一进行查询的时候 需要指定scroll = time 以及传递 每次获取的条数即可GET goods/_search?scroll=1m{ "query": { "match_all": {} } , "size": 20}srocll滚动查询的时原创 2020-05-20 21:04:25 · 1199 阅读 · 0 评论 -
elasticsearch评分所用到的算法
1、算法介绍relevance /ˈreləvəns/ score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度Elasticsearch使用的是 term frequency /ˈfriːkwənsi/ /inverse document frequency算法,简称为TF/IDF算法Term frequency:搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关搜索请求:hello worlddoc1:hello you, and原创 2020-05-19 21:59:31 · 1358 阅读 · 0 评论
分享