elasticsearch
文章平均质量分 85
私念
PHP GOLANG
展开
-
elasticsearch中best fields策略dis_max和tie_breaker详解
参考:elasticsearch中best fields策略dis_max和tie_breaker详解概念 常规multi-field搜索结果分析 dis_max参数设置 一、为帖子数据增加content字段POST/forum/article/_bulk{"update":{"_id":"1"}}{"doc":{"content":"iliketowritebestelasticsearcharticle"}}{"upda...原创 2021-12-28 20:06:30 · 530 阅读 · 0 评论 -
elasticsearch中四种常见的相关度分数优化方法
对相关度评分进行调节和优化的常见的4种方法1、query-time boost 查询的时候设置query的boost. 增加权重2、重构查询结构.如should中嵌套bool。3、negative boost 包含了negative term的doc,分数乘以negative boost,分数降低4、constant_score 如果你压根儿不需要相关度评分,直接走constant_score加filter,所有的doc分数都是1,没有评分的概念了1、query-time boost原创 2021-12-23 21:54:12 · 1410 阅读 · 0 评论 -
jsonp安全攻防技术(JSON劫持、XSS漏洞)
关于 JSONPJSONP 全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用了 HTML 里 <script></script> 元素标签,远程调用 JSON 文件来实现数据传递。如要在 a.com 域下获取存在 b.com 的 JSON 数据( getUsers.JSON ):{"id":"1","name":"名字"}那么他们可以首先通过 JSONP 的“ Padding...原创 2021-06-07 21:32:19 · 2741 阅读 · 0 评论 -
elasticsearch官方已支持SQL查询
背景平时使用Elasticsearch的时候,偶尔会在Kibana中使用Query DSL来查询数据。每次要用到Query DSL时都基本忘光了,需要重新在回顾一遍,最近发现Elasticsearch已经支持SQL查询了(6.3版本以后)简介Elasticsearch SQL是一个X-Pack组件,它允许针对Elasticsearch实时执行类似SQL的查询。无论使用REST接口,命令行还是JDBC,任何客户端都可以使用SQL对Elasticsearch中的数据进行原生搜索和聚合数据。可以.原创 2021-06-02 20:58:40 · 434 阅读 · 2 评论 -
elasticsearch搜索建议与上下文提示suggesters
参考:https://www.phpmianshi.com/?id=258查询建议是什么?查询建议,为用户提供良好的使用体验。主要包括: 拼写检查; 自动建议查询词(自动补全)拼写检查如图:自动建议查询词(自动补全):搜索建议通过Suggester Api实现原理是将输入的文本分解为Token,然后在词典中查找类似的Term返回根据不同场景,ElasticSearch设计了4中类别的Suggesters。 Term Suggester Phrase .原创 2021-05-25 20:23:09 · 787 阅读 · 2 评论 -
elasticsearch中忽略大小写模糊搜索实现
参考:https://www.phpmianshi.com/?id=255背景有时我们想cms搜索的时候更精准一点,可能会用到wildcard不分词的模糊搜索,但是不分词就有区分大小写搜索的问题解决方案1.在es查询时不区分大小写,可以让查询更方便,具体设置如下:{ "settings": { "analysis": { "analyzer": { "caseSensitive": { ...原创 2021-05-24 21:33:00 · 6440 阅读 · 2 评论 -
elasticsearch7.X Mapping常见字段类型整理
参考:https://www.phpmianshi.com/?id=254一、核心数据类型 字符串:text,keyword 数值型:long,integer,short,byte,double,float,half_float,scaled_float 布尔型:boolean 日期型:date,date_nanos 二进制:binary 范围型:integer_range,float_range,long_range,do...原创 2021-05-20 22:06:12 · 461 阅读 · 0 评论 -
logstash实现reindex
参考:https://www.phpmianshi.com/?id=253概念Elasticsearch 本身不提供对索引的 rename,mapping 的 alter 等操作。所以,如果有需要对全索引数据进行导出,或者修改某个已有字段的 mapping 设置等情况下,我们只能通过 scroll API 导出全部数据,然后重新做一次索引写入。这个过程,叫做 reindex。logstash实现reindex在最新版的 Logstash 中,对 logstash-input-elast.原创 2021-05-17 21:20:19 · 201 阅读 · 0 评论 -
elasticsearch中设置查询的请求超时时间
参考:https://www.phpmianshi.com/?id=251背景因为我们的项目是用的php,为了防止调用搜索时,请求处理时间太长,导致php-fpm占满,所以需要对外部接口设置请求的超时时间,避免过多的超时请求,我们可以用过对es的参数限制,设置超时时间search 请求参数 from 从索引的第几条数据开始返回,默认是 0; size 返回多少条数据,默认是 10。注意:Elasticsearch 集群实际是需要给 coordinate node 返.原创 2021-05-12 21:54:11 · 9507 阅读 · 0 评论 -
elasticsearch中搜索数量不能超过10000的解决方案
问题描述开发环境: JDK1.8、Elasticsearch7.5.1最近在操作ES进行分页查询(from+size)时,需要返回满足条件的数据总数。我发现满足条件的数据总数一旦超过10000条,返回的结果永远是10000。为什么会被限制只能搜索10000条数据呢?如何查询精确的数据总数呢?问题分析查看官方文档: Elasticsearch 7.5Elasicsearch通过index.max_result_window参数控制了能够获取的数据总数from+size的最大值,默认是100.原创 2021-05-10 20:01:26 · 1204 阅读 · 0 评论 -
logstash-keystore保存Elasticsearch或其他密码
参考:https://www.phpmianshi.com/?id=249背景在配置Logstash时,你可能需要指定敏感设置或配置,比如密码,与依赖文件系统权限来保护这些值不同,你可以使用Logstash keystore来安全地存储用于配置设置的secret值。在向keystore中添加key及其secret值之后,你可以在配置敏感设置时使用key代替secret值。引用key的语法与环境变量的语法相同:${KEY},KEY是key的名称。例如:jdbc_password=>.原创 2021-05-06 20:29:19 · 756 阅读 · 2 评论 -
elasticsearch中基于slop参数实现近似匹配
参考:https://www.phpmianshi.com/?id=248slop的含义query string,搜索文本,中的几个term,要经过几次移动才能与一个document匹配,这个移动的次数,就是slop词条位置当一个字符串被分析时,分析器不仅只返回一个词条列表,它同时也返回原始字符串的每个词条的位置、或者顺序信息:例如:POST/_analyze{"analyzer":"standard","text":"区块链比特币"}结果:...原创 2021-04-29 20:35:13 · 307 阅读 · 0 评论 -
logstash多配置文件的使用和常见问题
参考:https://www.phpmianshi.com/?id=245背景假设现在给Logstash的pipeline配置了2个conf,也就是2个输入源。如果不做任何处理,那么所有的Filter和Output都会同时触发,如下图:这显然跟我们期望的不同,我们希望Logstash按以下的方式来处理,也就是各自区分,独立处理:解决方案官方提供有 type 和tags 配置项进行区分,type 和 tags 是 logstash 事件中两个特殊的字段。通常来说我们会在输.原创 2021-04-26 20:32:14 · 1230 阅读 · 0 评论 -
elasticsearch中自定义分析器
参考:https://www.phpmianshi.com/?id=244自定义分析器虽然Elasticsearch带有一些现成的分析器,然而在分析器上Elasticsearch真正的强大之处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单元过滤器来创建自定义的分析器。一个分析器就是在一个包里面组合了三种函数的一个包装器, 三种函数按照顺序被执行: 字符过滤器 字符过滤器 用来整理一个尚未被分词的字符串。例如,如果我们的文本是HTML格...原创 2021-04-25 20:30:58 · 179 阅读 · 0 评论 -
elasticsearch中分片(Shards)的理解
参考:https://www.phpmianshi.com/?id=243分片重要性ES中所有数据均衡的存储在集群中各个节点的分片中,会影响ES的性能、安全和稳定性, 所以很有必要了解一下它。分片是什么?简单来讲就是咱们在ES中所有数据的文件块,也是数据的最小单元块,整个ES集群的核心就是对所有分片的分布、索引、负载、路由等达到惊人的速度实列场景:假设 IndexA 有2个分片,我们向 IndexA 中插入10条数据 (10个文档),那么这10条数据会尽可能平均的分为5条存储在第一原创 2021-04-19 19:29:07 · 274 阅读 · 0 评论 -
elasticsearch中forcemerge清除文件占用的磁盘空间
参考:https://www.phpmianshi.com/?id=242背景最近发现es占用的磁盘存储大小一直在增加,本来1mb的东西,隔了1-2天达到100mb多,如下分析elasticsearch是建立在Apache Lucene基础上的实时分布式搜索引擎,Lucene为了提高搜索的实时性,采用不可再修改(immutable)方式将文档存储在一个个segment中。也就是说,一个segment在写入到存储系统之后,将不可以再修改。那么Lucene是如何从一个segment中...原创 2021-04-15 19:52:31 · 4795 阅读 · 0 评论 -
ELK7.5.1实战-自建logstash同步数据到腾讯云ES集群
参考:https://www.toutiao.com/i6950604658897404423/背景本来自建的单机ES提供搜索服务,随着数据的变多,性能已经成为严重的问题,现在准备迁移到腾讯云ES集群实战示例1. 购买腾讯云白金版ES集群7.5.1集群自带 es+kibana 但是不带logstash,所以还要自己安装一个2. 下载logstash7.5.1+JDKwgethttps://artifacts.elastic.co/do...原创 2021-04-13 19:51:01 · 310 阅读 · 0 评论 -
elasticsearch中store设置true和false的区别
参考:https://www.phpmianshi.com/?id=218概念设置索引的时候,我们给某些字段的store属性设置为true,在查询时,请求中可以携带stored_fields参数,指定某些字段,最后,这些字段会被包含在返回的结果中。如果请求中携带的字段没有被储存,将会被忽略。示例默认的场景我们先观察没有设置store属性的字段情况。我们新增一个document,并利用自动生成索引功能创建索引:PUTmy_index/_doc/1{"con...原创 2021-04-02 18:29:01 · 3149 阅读 · 0 评论 -
elasticsearch中的keyword设置ignore_above
参考:https://www.phpmianshi.com/?id=217概念我们在ElasticSearch的官方文档上可以看到这样关于mapping中ignore_above的解释:Strings longer than the ignore_above setting will not be indexed or stored. For arrays of strings, ignore_above will be applied for each array element separat原创 2021-03-31 20:44:46 · 3371 阅读 · 0 评论 -
elasticsearch中字符串类型text vs keyword的选择
参考:https://www.phpmianshi.com/?id=201关于ES字符串类型的选择ElasticSearch 5.0以后,string类型有重大变更,移除了string类型,string字段被拆分成两种新的数据类型:text用于全文搜索的,而keyword用于关键词搜索。ElasticSearch字符串将默认被同时映射成text和keyword类型,将会自动创建下面的动态映射(dynamic mappings):{"foo":{"type":...原创 2021-03-30 18:30:58 · 764 阅读 · 0 评论 -
elasticsearch中修改mapping实战
参考:https://www.phpmianshi.com/?id=200查询原有mapping登录kibana的Index Management 查看 Mapping{"mapping":{"properties":{"@timestamp":{"type":"date"},"@version":{"type"...原创 2021-03-16 20:48:00 · 424 阅读 · 0 评论 -
elasticsearch中分词器edge_ngram和ngram的区别
参考:https://www.phpmianshi.com/?id=199简介edge_ngram和ngram是ElasticSearch自带的两个分词器,一般设置索引映射的时候都会用到,设置完步长之后,就可以直接给解析器analyzer的tokenizer赋值使用。场景用 Elasticsearch 处理通配符查询不太适合,推荐用分词器 NGram,这个分词器可以让通配符查询和普通的查询一样迅速,因为该分词器在数据索引阶段就把所有工作做完了示例若要使用 NGram 分词器作为某..原创 2021-03-15 19:47:35 · 1183 阅读 · 0 评论 -
elasticsearch中的常见问题和优化策略
参考:https://www.phpmianshi.com/?id=216常见优化策略:filter过滤器查询优化结果分数是Elasticsearch的关键。 通常,当您使用搜索引擎时,您需要最准确的结果。 例如,如果您正在搜索“苹果”,您不希望结果包括“苹果手机”。Elasticsearch根据您提供的参数对查询结果进行评分。虽然查询相关性不是本篇文章的重点,但重要的是在此提及,因为如果您有快速搜索需求但结果不是您要查找的结果,则整个搜索都是浪费时间。 那么,你如何加快搜索速度?1原创 2021-03-08 20:12:17 · 275 阅读 · 0 评论 -
elasticsearch中如何分析慢查询
参考:https://www.phpmianshi.com/?id=198背景首先,Elasticsearch中有两个版本的慢速日志:索引慢速日志(index slow logs )和搜索慢速日志( search slow logs)。 由于我们试图解决的问题涉及慢查询,我们将专注于搜索慢速日志。 但是,如果在索引文档/添加文档时问题,那么我们将查看索引慢速日志。默认情况,慢日志是不开启的。要开启它,需要定义具体动作(query,fetch 还是 index),你期望的事件记录等级(WA..原创 2021-03-03 20:31:10 · 2289 阅读 · 2 评论 -
elasticsearch中重新索引数据
参考:https://www.phpmianshi.com/?id=170概念虽然你可以给索引添加新的类型,或给类型添加新的字段,但是你不能添加新的分析器或修改已有字段。假如你这样做,已被索引的数据会变得不正确而你的搜索也不会正常工作。修改在已存在的数据最简单的方法是重新索引:创建一个新配置好的索引,然后将所有的文档从旧的索引复制到新的上。_source 字段的一个最大的好处是你已经在 Elasticsearch 中有了完整的文档,你不再需要从数据库中重建你的索引,这样 ...原创 2021-02-23 20:20:52 · 435 阅读 · 0 评论 -
elasticsearch中动态模板全解实战
参考:https://www.phpmianshi.com/?id=169动态模板在我们最开始使用ES的时候,可能还不太了解mapping,也没有添加过mapping为什么我们还是能够正常的添加文档。那是因为ES可以动态映射,添加文档的时候遇到没有的字段,可以动态的添加到mapping中动态模板,英文名为Dynamic Templates,是根据Elasticsearch可识别的数据类型,结合字段名称,来动态设定字段类型的一种机制。自动识别规则首先es可以自动识别文档字段的类型.原创 2021-02-22 19:46:52 · 1291 阅读 · 0 评论 -
elasticsearch中mapping全解实战
参考:https://www.phpmianshi.com/?id=168Mapping简介#mapping 是用来定义文档及其字段的存储方式、索引方式的手段,例如利用mapping来定义以下内容: 哪些字段需要被定义为全文检索类型 哪些字段包含number、date、布尔、浮点类型等 格式化时间格式 自定义规则,用于控制动态添加字段的映射 自定义mappingmapping中的字段类型一旦设置,禁止直接修改,因为 lucene实现的倒排索引生成后..原创 2021-02-19 20:12:40 · 259 阅读 · 0 评论 -
elasticsearch中最重要的查询过滤语句
参考:https://www.phpmianshi.com/?id=167term 过滤term 主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型){ "term": { "age": 26 }}{ "term": { "date": "2014-09-01" }}{ "term": { "public": true }}{ "term": { "tag": "full_text" }}terms 过滤te..原创 2021-02-09 19:16:21 · 201 阅读 · 0 评论 -
logstash中同步mysql到elastic常见问题总结
参考:https://www.phpmianshi.com/?id=1661. mysql查询字段中有 type字段问题原因select语句中查到了type, 但es中会默认有一个type, 这使得两个type冲突.会导致同步失败,且没有报错GETmy_index/_mapping返回的数据中包含一个type字段如下:"type":{"type":"text","fields":{"keyword"...原创 2021-02-07 19:50:29 · 792 阅读 · 0 评论 -
elasticsearch中倒排索引详解
参考:https://www.phpmianshi.com/?id=164概念Elasticsearch使用一种叫做倒排索引(inverted index)的结构来做快速的全文搜索。倒排索引由在文档中出现的唯一的单词列 表,以及对于每个单词在文档中的位置组成。示例我们有两个文档,每个文档 content 字段包含:1. The quick brown fox jumped over the lazy dog2. Quick brown foxes leap over ...原创 2021-01-18 20:19:21 · 267 阅读 · 0 评论 -
elasticsearch中分析器的原理和使用
参考:https://www.phpmianshi.com/?id=163概念分析(analysis)机制用于进行全文文本(Full Text)的分词,以建立供搜索用的反向索引。原理分析器的工作过程大概分成两步: 分词(Tokenization):根据停止词把文本分割成很多的小的token,比如the quick fox会被分成the、quick、fox,其中的停止词就是空格,还有很多其他的停止词比如&或者#,大多数的标点符号都是停止词 归一化(Normaliz.原创 2021-01-15 19:58:54 · 301 阅读 · 0 评论 -
elasticsearch中query和filter区别
参考:https://www.phpmianshi.com/?id=162区别在进行query的时候,除了完成匹配的过程,我们实际上在问“这个结果到底有多匹配我们的搜索关键词”。在所有的返回结果的后面都会有一个_score字段表示这个结果的匹配程度,也就是相关性。相关性越高的结果就越排在前面,相关性越低就越靠后。当两个文档的相关性相同的时候,会根据lucene内部的doc_id字段来排序,这个字段对于用户是不可见的也不能控制。而在进行filter的时候,仅仅是在问“这个文档符不符合要求”,这仅仅原创 2021-01-14 20:54:43 · 201 阅读 · 0 评论 -
elasticsearch中SearchApi的详解
参考:https://www.phpmianshi.com/?id=161搜索流程当一个搜索请求被发送到某个节点时,这个节点就变成了协调节点。这个节点的任务是广播查询请求到所有相关分片并将它们的响应整合成全局排序后的结果集合,这个结果集合会返回给客户端。多索引搜索恰好也是用相同的方式-只是会涉及到更多的分片。查询阶段客户端发送一个 search 请求到 Node 3 , Node 3 会创建一个大小为 from + size 的空优先队列。Node 3 将查询请求转发到索引的每个主分片或.原创 2021-01-13 22:44:29 · 164 阅读 · 0 评论 -
elasticsearch模糊查询match match_phrase wildcard regexp prefix的区别
参考:https://www.phpmianshi.com/?id=1601.match查询会先对搜索词进行分词,比如“白雪公主和苹果”,会分成“白雪”“公主”“苹果”。含有相关内容的字段,都会被检索出来。2.match_phrase查询match_phrase与slop一起用,能保证分词间的邻近关系,slop参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配,默认是0。为0时 必须相邻才能被检索出来。例如下面的语句,会把“白雪公主吃苹果”也能检索出来GETm.原创 2021-01-11 21:04:38 · 1114 阅读 · 0 评论 -
elasticsearch基于地理位置的搜索
参考:https://www.phpmianshi.com/?id=159场景现在基于地理位置的app层出不穷,支持地理位置的组件也有不少,Elasticsearch也不例外,并且ES可以把地理位置、全文搜索、结构化搜索和分析结合到一起,我们来看一下。注意本文章基于es7,用es6的话可能语法稍有不同,仅供参考geo point数据类型Elasticsearch基于地理位置的搜索,有一个专门的对象geo_point存储地理位置信息(经度,纬度),并且提供了一些基本的查询方..原创 2021-01-08 14:41:55 · 884 阅读 · 1 评论 -
elasticsearch高亮搜索highlight
参考:https://www.phpmianshi.com/?id=158概念我们在浏览器上搜索文本时,发现我们输入的关键字有高亮显示,查看html源码就知道,高亮的部分是加了<em>标签的,ES也支持高亮搜索这种操作的,并且在返回的文档中自动加了<em>标签,兼容html5页面。highlight基本语法GETmy_index/_search{"query":{"match":{"content":"happy...原创 2021-01-05 19:20:47 · 1260 阅读 · 0 评论 -
elasticsearch用于html去标签化搜索
参考:https://www.phpmianshi.com/?id=157场景elasticsearch用于html去标签化搜索:即在Index的时候忽略html tag,同时又存储了完整的html,在使用的时候可以正常读出来。示例假设我们给content字段自定义analyzer ,分别是:html_text_analyzer,html_keyword_analyzer定义两种过滤html标记后,自动生成的没有html标签的indexPUTmy_inde...原创 2021-01-04 19:41:43 · 2720 阅读 · 0 评论 -
logstash过滤器--mutate
参考:https://www.phpmianshi.com/?id=149概念filters/mutate 插件是 Logstash 另一个重要插件。它提供了丰富的基础类型数据处理能力。包括类型转换,字符串处理和字段处理等。Plugin version: v3.5.0执行顺序coercerenameupdatereplaceconvertgsubuppercasecapitalizelowercasestripremovesplitjoinmerg..原创 2020-12-31 18:07:51 · 677 阅读 · 0 评论 -
es中单机部署状态为Yellow解决办法
参考:https://www.phpmianshi.com/?id=133背景单机版的 ES 状态为 Yellow,在 Kibana 的管理界面看到的 index 的状态也是 Yellow这个问题在于单机版的 ES,是没有备份的,没有副本,设置 index 副本的数量为 0 即可集群健康状态从数据完整性的角度划分,集群健康状态分为:Green ,所有的主分片和副分片都正常运行Yellow ,所有的主分片都正常运行,但不是所有的副分片都正常运行 存在 单点故障风险...原创 2020-12-30 20:06:51 · 5803 阅读 · 0 评论 -
kibana DevTools语句查询详解
参考:https://www.phpmianshi.com/?id=119直接点击Dev Tools,来看基本操作1,输入:GET /{"name":"GddjX_V","cluster_name":"elasticsearch","cluster_uuid":"Z4oj43mcQKGiMF70lFDv-Q","version":{"number":"6.3.2","build_flavor":"default","bui...原创 2020-12-25 18:20:38 · 1725 阅读 · 0 评论