lucene

互联网 Java 工程师面试题系列(Elasticsearch 面试题)

烈酒焚心 提交于 2020-04-18 04:02:46
1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。 面试官:想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大 规模的索引设计、规划、调优。 解答: 如实结合自己的实践场景回答即可。 比如:ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日 递增 20+,索引:10 分片,每日递增 1 亿+数据, 每个通道每天索引大小控制:150GB 之内。 仅索引层面调优手段: 1.1、设计阶段调优 1、根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索 引; 2、使用别名进行索引管理; 3、每天凌晨定时对索引做 force_merge 操作,以释放空间; 4、采取冷热分离机制,热数据存储到 SSD,提高检索效率;冷数据定期进行 shrink 操作,以缩减存储; 5、采取 curator 进行索引的生命周期管理; 6、仅针对需要分词的字段,合理的设置分词器; 7、Mapping 阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。…….. 1.2、写入调优 1、写入前副本数设置为 0; 2、写入前关闭 refresh_interval 设置为-1,禁用刷新机制; 3、写入过程中:采取 bulk 批量写入; 4、写入后恢复副本数和刷新间隔; 5

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

雨燕双飞 提交于 2020-04-17 07:11:25
【推荐阅读】微服务还能火多久?>>> 前言 刚开始接触Elasticsearch的时候被Elasticsearch的搜索功能搞得晕头转向,每次想在Kibana里面查询某个字段的时候,查出来的结果经常不是自己想要的,然而又不知道问题出在了哪里。出现这个问题归根结底是因为对于Elasticsearch的底层索引原理以及各个查询搜索方式的不了解,在Elasticsearch中仅仅字符串相关的查询就有19个之多,如果不弄清楚查询语句的工作方式,应用可能就不会按照我们预想的方式运作。这篇文章就详细介绍了Elasticsearch的19种搜索方式及其原理,老板再也不用担心我用错搜索语句啦! 简介 Elasticsearch为所有类型的数据提供实时搜索和分析,不管数据是结构化文本还是非结构化文本、数字数据或地理空间数据,都能保证在支持快速搜索的前提下对数据进行高效的存储和索引。用户不仅可以进行简单的数据检索,还可以聚合信息来发现数据中的趋势和模式。 搜索是Elasticsearch系统中最重要的一个功能,它支持结构化查询、全文查询以及结合二者的复杂查询。结构化查询有点像SQL查询,可以对特定的字段进行筛选,然后按照特定的字段进行排序得到结果。全文查询会根据查询字符串寻找相关的文档,并且按照相关性排序。 Elasticsearch内包含很多种查询类型,下面介绍是其中最重要的19种

ElasticSearch写入数据的工作原理是什么?

≡放荡痞女 提交于 2020-04-17 03:49:09
【推荐阅读】微服务还能火多久?>>> 面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是...... 对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢? 面试题剖析 es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。 coordinating node 对 document 进行 路由 ,将请求转发给对应的 node(有 primary shard)。 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 es 读数据过程 可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去

Lucene6.0学习笔记——常用查询(二)

拈花ヽ惹草 提交于 2020-04-17 03:44:22
【推荐阅读】微服务还能火多久?>>> 1.通配符查询WildcardQuery Lucene提供两种通配符,*和?查询,*表示能匹配多个字符,?仅能匹配一个字符。 例如:现在有两个词,name与nav,对他们进行通配符查询,na*可以搜索出两个词,而na?就只能搜索出nav一个词。 Term term=new Term("name","wan*"); //通配符查询,*表示多个字符,?表示单个字符 Query query=new WildcardQuery(term); 搜索结果: 2.范围查询TermRangeQuery Query query=new TermRangeQuery("size", new BytesRef("090"), new BytesRef("500"), false, true); 以上是范围查询的主要代码,查询的是大小范围在90到500之间的文件,可以看到这里把90写成了090,这是因为 lucene范围查询是直接比较字符串 ,依次比较字符ASCLL码,90比500大,如果直接写成90的话,就会查询不出数据。 后面两个值为false和true的参数,表明是否包含边界值,false表明不包含下限值,后面true表明包含上限值。 搜索结果为: 上面查询规则可以看到,花括号“{”表明不包含边界值,中括号“]”表明包含边界值。 3

kibana使用的lucene查询语法

烂漫一生 提交于 2020-04-17 03:25:52
【推荐阅读】微服务还能火多久?>>> kibana在ELK阵营中用来查询展示数据 elasticsearch构建在Lucene之上,过滤器语法和Lucene相同 kibana4官方演示页面 全文搜索 在搜索栏输入login,会返回所有字段值中包含login的文档 使用双引号包起来作为一个短语搜索 "like Gecko" 字段 也可以按页面左侧显示的字段搜索 限定字段全文搜索: field:value 精确搜索:关键字加上双引号 filed:"value" http.code:404 搜索http状态码为404的文档 字段本身是否存在 _exists_:http :返回结果中需要有http字段 _missing_:http :不能含有http字段 通配符 ? 匹配单个字符 * 匹配0到多个字符 kiba?a , el*search ? * 不能用作第一个字符,例如: ?text *text 正则 es支持部分 正则 功能 mesg:/mes{2}ages?/ 模糊搜索 ~ :在一个单词后面加上 ~ 启用模糊搜索 first~ 也能匹配到 frist 还可以指定需要多少相似度 cromm~0.3 会匹配到 from 和 chrome 数值范围0.0 ~ 1.0,默认0.5,越大越接近搜索的原始值 近似搜索 在短语后面加上 ~ "select where"~3 表示 select 和

记:Lucene布尔搜索

两盒软妹~` 提交于 2020-04-16 12:00:18
【推荐阅读】微服务还能火多久?>>> BooleanQuery实际开发中常用到的一种Query查询,它其实是一个组合的Query,在使用时可以把各种Query对象加进去并标明他们之间的逻辑关系。BooleanQuery本身是一个布尔子句的容器,它提供了专门的API方法往其中添加子句,并标明他们之间的关系。多个关键词匹配搜索的业务场景不少,代码如下,简单的例子。 public static void main(String[] args) throws IOException { //索引读取 IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get("indexdir"))); //构建索引搜索 IndexSearcher searcher = new IndexSearcher(reader); //构建搜索条件 Query query1 = new TermQuery(new Term("title","美国")); Query query2 = new TermQuery(new Term("content","学生")); BooleanClause bc1 = new BooleanClause(query1, BooleanClause.Occur.MUST); BooleanClause

Lucene Query Boosting

狂风中的少年 提交于 2020-04-16 01:55:21
问题 I am reading 2 query from file like, Query q1 = new QueryParser(Version.LUCENE_CURRENT, "id", analyzer).parse(dis.readLine()); Query q2 = new QueryParser(Version.LUCENE_CURRENT, "id", analyzer).parse(dis.readLine()); I want these query to be combined as one query and give some boost (say by 5) to query 2 i.e q2. Thanks, Ravi 回答1: I believe this should work: q2.setBoost(5); BooleanQuery q3 = new BooleanQuery(); q3.add(q1, BooleanClause.Occur.SHOULD); q3.add(q2, BooleanClause.Occur.SHOULD); You

Lucene4.3开发之第五步之融丹筑基(五)

人走茶凉 提交于 2020-04-15 23:28:09
【推荐阅读】微服务还能火多久?>>> 排序是对于全文检索来言是一个必不可少的功能,在实际运行中,排序功能在某些时候给我们带来了很大的方便,比如在淘宝、京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评价数最高或卖的最好的商品,再比如在iteye里的博客栏里,每天都会以降序的方式,来显示出最新发布的几篇博客,有了排序,我们就能在某些时候很方便快速的得到某些有效信息,所以说排序功能,无处不在。 本篇,就来看下我们在lucene中怎么使用其丰富的排序功能。 在此之前,我们先来熟悉下lucene中排序的基本知识,在默认情况下,lucene使用是以关联性降序的方式作为默认的排序方式,这样可以使得我们搜索的结果通常是最优的,因为它会尽可能使得首先出现的几个结果是与我们搜索的内容最相关的,而不不需要我们翻页寻找我们最想要的内容,这一点是与数据库相比,是全文检索一个很大的有点。当然,在实际开发中我们也需要根据业务的实际情况来个我们的客户提供多种不同的排序方式。我们先来看下载lucene中比较特殊的两种基本的排序方式。 我们再来看几个检索是需要用的方法 =========SortField类============ //field是排序字段type是排序类型 public SortField(String field, Type type); /

lucene 自定义评分 影响排序

寵の児 提交于 2020-04-15 23:27:10
【推荐阅读】微服务还能火多久?>>> 前记 这段时间需要修改一个别人写的一个搜索有关的项目,恰好底层使用的是lucene搜索框架。 为什么要去修改呢,当然是搜索结果不太令人满意啦,于是去研读了项目中关于搜索的代码。。。。。。 正文 经过了几天代码的研读,最终总结出来了几条问题: 创建索引的过程,相当简单,感觉仅仅是把lucene当成关键词匹配的工具去了(需要修改索引策略) 搜索的过程也是比较简单,没有结合项目的需求,定制化搜索(搜索策略需要修改) 额,感觉上面两条好像是在说废话,感觉lucene的和核心就是索引和搜索 为了能尽快解决问题,初步修改就定为了: 索引阶段,将信息分成多个域,同时根据域的重要程度,加入权重。还有就是加入搜索结果排序要使用的字段(分域,权重,加入排序字段) 搜索阶段 根据类别搜索不同的域,同时加入自定义评分 下面就简单的说一下自定义评分: 我用的是lucene是: <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>4.10.2</version> </dependency> 上网查了很多的资料,发现lucene实现自定义评分是通过在构建查询的时候加入的,操作起来很方便。直接上代码吧: public class

阿里巴巴复杂搜索系统的可靠性优化之路

谁说胖子不能爱 提交于 2020-04-15 15:40:54
【推荐阅读】微服务还能火多久?>>> 背景 搜索引擎是电商平台成交链路的核心环节,搜索引擎的高可用直接影响成交效率。闲鱼搜索引擎作为闲鱼关键系统,复杂度和系统体量都非常高,再加上闲鱼所有导购场景都依靠搜索赋能,搜索服务的稳定可靠成为了闲鱼大部分业务场景可用能力的衡量标准;如何保障搜索服务的稳定和高可用成为了极大的挑战。 闲鱼搜索作为闲鱼核心系统,有以下几个突出的特点: 数据体量大:对接闲鱼数十亿的商品,引擎有效商品数亿; 索引庞大:闲鱼非结构化商品需要与算法团队合作,预测抽取有价值的结构化信息,建立索引;已创建数百的索引字段,整个引擎索引数据量为T级别; 增量消息多:日常增量消息QPS 数十万,峰值QPS可以达到 数百万; 查询复杂:很多特殊业务场景,查询条件要求苛刻而复杂;比如召回GROUP分组统计,聚合/打散/去重,关键词复合运算查询等; 实时性性要求高:闲鱼中都是二手商品,卖家商品的库存都是1;商品上下架频繁,对引擎数据的同步更新实时性要求非常高; 智能化扩展:由于闲鱼商品非结构化特性,为保障召回数据的效果以及相关性;需要引擎具备智能插件扩展的能力,能与算法开发人员协同; 鉴于闲鱼商品搜索引擎以上主要特点,本文详细介绍闲鱼搜索在系统高可用上做的各种努力,希望能给读者一些启发。 闲鱼搜索整体架构 正式引出搜索稳定性保障方案之前,我们需要对闲鱼搜索技术有一个简单大致的了解;