201909-09 elasticsearch如何实现相似推荐功能 NEW 1、什么是相似推荐?比如我近期购买的吴军老师推荐的科普经典巨著《从一到无穷大》,京东会给我推荐樊登读书带火的书《微积分原理》。其实,在实际业务实战环节,或多或少也会有类似的功能,Elasticsearch 有没有类似功能呢?大家实战环节遇到的问题也大致如下:Q1:ES 有相似搜索这个功能吧?我记得有个 suggester吧?Q2:ES有没有处理相似文字的案例?2、Elasticsearch 相似推荐功能实现这里不得不介绍:MLT 检索。对!你没看错。不是:MIT(麻省理工学院... Read More >
201909-08 elasticSerch同时查询多个索引 NEW 背景许多场景需要查询的结果不在一个索引里面,但是elasticseach不能像别的数据库一样进行联查,所以我们可以同时查询多个索引的字段来满足需求查询DSL语句GET /_search { "size": 20, "query": { "bool": { &nb... Read More >
201909-07 elasticsearch深度分页详解-史上最全面试必备 NEW 三大ElasticSearch分页方式1、传统方式(from&size) 顶部查询,查询10000以内的文档 场景:需要实时获取顶部的部分文档。 eg: 例如查询最新的订单。2、Scroll 滚动游标 方式 深度分页,用于非实时查询场景 eg... Read More >
201909-06 elasticsearch中实现SQL中like的匹配效果 背景我们经常会遇到这种后台需求,要求实现SQL中like “%xxxx%”的匹配效果。因为后端要求搜索要毕竟准确的搜出来,方便做运营相关的。wildcard通配这种效果在ES中最匹配的做法是用wildcard query通配,这种情况不会对query分词,而是直接遍历倒排索引逐个匹配计算,性能是无法想象的,大家慎用。match全文匹配效果最差的做法是用match全文检索,这种情况只要query分词的任何一个term出现在倒排中,就会召回文档,所以很容易搜出一些八竿子打不着的文... Read More >
201909-05 elasticsearch中best fields策略dis_max和tie_breaker详解 概念常规multi-field搜索结果分析dis_max参数设置 一、为帖子数据增加content字段POST /forum/article/_bulk { "update": { "_id": "1"} } { "doc" : {"content" ... Read More >
201909-04 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 b... Read More >
201909-03 elasticsearch官方已支持SQL查询 背景平时使用Elasticsearch的时候,偶尔会在Kibana中使用Query DSL来查询数据。每次要用到Query DSL时都基本忘光了,需要重新在回顾一遍,最近发现Elasticsearch已经支持SQL查询了(6.3版本以后)简介Elasticsearch SQL是一个X-Pack组件,它允许针对Elasticsearch实时执行类似SQL的查询。无论使用REST接口,命令行还是JDBC,任何客户端都可以使用SQL对Elasticsearch中的数据进行原生搜索和... Read More >
201909-02 elasticsearch搜索建议与上下文提示suggesters 查询建议是什么?查询建议,为用户提供良好的使用体验。主要包括: 拼写检查; 自动建议查询词(自动补全) 拼写检查如图:自动建议查询词(自动补全):搜索建议通过Suggester Api实现原理是将输入的文本分解为Token,然后在词典中查找类似的Term返回根据不同场景,ElasticSearch设计了4中类别的Suggesters。Term SuggesterPhrase SuggesterComplete SuggesterContext SuggesterTe... Read More >
201909-01 elasticsearch中忽略大小写模糊搜索实现 背景有时我们想cms搜索的时候更精准一点,可能会用到wildcard不分词的模糊搜索,但是不分词就有区分大小写搜索的问题解决方案1.在es查询时不区分大小写,可以让查询更方便,具体设置如下:{ "settings": { "analysis": { "analyzer... Read More >
201908-30 elasticsearch7.X Mapping常见字段类型整理 一、核心数据类型字符串:text, keyword数值型:long, integer, short, byte, double, float, half_float, scaled_float布尔型:boolean日期型:date, date_nanos二进制:binary范围型:integer_range, float_range, long_range, ... Read More >
201908-29 logstash实现reindex 概念Elasticsearch 本身不提供对索引的 rename,mapping 的 alter 等操作。所以,如果有需要对全索引数据进行导出,或者修改某个已有字段的 mapping 设置等情况下,我们只能通过 scroll API 导出全部数据,然后重新做一次索引写入。这个过程,叫做 reindex。logstash实现reindex在最新版的 Logstash 中,对 logstash-input-elasticsearch 插件做了一定的修改,使得通过 logstash... Read More >
201908-28 elasticsearch中设置查询的请求超时时间 背景因为我们的项目是用的php,为了防止调用搜索时,请求处理时间太长,导致php-fpm占满,所以需要对外部接口设置请求的超时时间,避免过多的超时请求,我们可以用过对es的参数限制,设置超时时间search 请求参数from从索引的第几条数据开始返回,默认是 0;size返回多少条数据,默认是 10。注意:Elasticsearch 集群实际是需要给 coordinate node 返回 shards number * (from + size) 条数据,... Read More >
201908-27 elasticsearch中搜索数量不能超过10000的解决方案 问题描述开发环境: JDK1.8、Elasticsearch7.5.1最近在操作ES进行分页查询(from+size)时,需要返回满足条件的数据总数。我发现满足条件的数据总数一旦超过10000条,返回的结果永远是10000。为什么会被限制只能搜索10000条数据呢?如何查询精确的数据总数呢?问题分析查看官方文档: Elasticsearch 7.5Elasicsearch通过index.max_result_window参数控制了能够获取的数据总数from+size的最大值,... Read More >
201908-26 logstash-keystore保存Elasticsearch或其他密码 背景在配置Logstash时,你可能需要指定敏感设置或配置,比如密码,与依赖文件系统权限来保护这些值不同,你可以使用Logstash keystore来安全地存储用于配置设置的secret值。在向keystore中添加key及其secret值之后,你可以在配置敏感设置时使用key代替secret值。引用key的语法与环境变量的语法相同:${KEY},KEY是key的名称。例如:jdbc_password => "${MYSQL_PWD}&q... Read More >
201908-25 elasticsearch中基于slop参数实现近似匹配 slop的含义query string,搜索文本,中的几个term,要经过几次移动才能与一个document匹配,这个移动的次数,就是slop词条位置当一个字符串被分析时,分析器不仅只返回一个词条列表,它同时也返回原始字符串的每个词条的位置、或者顺序信息:例如:POST /_analyze { "analyzer": "standard", "text&... Read More >
201908-24 logstash多配置文件的使用和常见问题 背景假设现在给Logstash的pipeline配置了2个conf,也就是2个输入源。如果不做任何处理,那么所有的Filter和Output都会同时触发,如下图:这显然跟我们期望的不同,我们希望Logstash按以下的方式来处理,也就是各自区分,独立处理:解决方案官方提供有 type 和tags 配置项进行区分,type 和 tags 是 logstash 事件中两个特殊的字段。通常来说我们会在输入区段中通过 type 来标记事件类型 —— 我们肯定是提前能知道这个事件属于什... Read More >
201908-23 elasticsearch中自定义分析器 自定义分析器虽然Elasticsearch带有一些现成的分析器,然而在分析器上Elasticsearch真正的强大之处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单元过滤器来创建自定义的分析器。一个 分析器 就是在一个包里面组合了三种函数的一个包装器, 三种函数按照顺序被执行:字符过滤器字符过滤器 用来 整理 一个尚未被分词的字符串。例如,如果我们的文本是HTML格式的,它会包含像 <p&... Read More >
201908-22 elasticsearch中分片(Shards)的理解 分片重要性ES中所有数据均衡的存储在集群中各个节点的分片中,会影响ES的性能、安全和稳定性, 所以很有必要了解一下它。分片是什么?简单来讲就是咱们在ES中所有数据的文件块,也是数据的最小单元块,整个ES集群的核心就是对所有分片的分布、索引、负载、路由等达到惊人的速度实列场景:假设 IndexA 有2个分片,我们向 IndexA 中插入10条数据 (10个文档),那么这10条数据会尽可能平均的分为5条存储在第一个分片,剩下的5条会存储在另一个分片中。和主流关系型数据库的表分区的... Read More >
201908-21 elasticsearch中forcemerge清除文件占用的磁盘空间 背景最近发现es占用的磁盘存储大小一直在增加,本来1mb的东西,隔了1-2天达到100mb多,如下分析 elasticsearch是建立在Apache Lucene 基础上的实时分布式搜索引擎,Lucene为了提高搜索的实时性,采用不可再修改(immutable)方式将文档存储在一个个segment中。也就是说,一个segment在写入到存储系统之后,将不可以再修改。那么Lucene是如何从一个segment中删除一个被索引的文档... Read More >
201908-20 ELK7.5.1实战-自建logstash同步数据到腾讯云ES集群 背景本来自建的单机ES提供搜索服务,随着数据的变多,性能已经成为严重的问题,现在准备迁移到腾讯云ES集群实战示例1. 购买腾讯云白金版ES集群7.5.1集群自带 es+kibana 但是不带logstash,所以还要自己安装一个2. 下载logstash7.5.1+JDKwget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gzwget https://mirrors... Read More >