- 博客(13)
- 收藏
- 关注
原创 Scala:函数式编程
将函数赋值给变量Scala中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量def sayHello(name:String){println("Hello," + name)}def sayHelloFunc = sayHello _ sayHelloFunc("LO")Scala的语法规定,将函数赋值给变量时,必须
2018-11-30 15:24:05 145
原创 Scala:Trait
将trait作为接口使用类可以使用extends关键字继承trait,注意,这里不是implement,而是extends,在scala中没有implement的概念,无论继承类还是trait,统一都是extends。类继承trait后,必须实现其中的抽象方法,实现时不需要使用override关键字trait SayHello { def sayHello(name:String)}...
2018-11-23 18:12:45 230
原创 Scala:面向对象
类类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。class Point(xc: Int, yc: Int) { var x: Int = xc var y: Int = yc def move(dx: Int, dy: Int) { x...
2018-11-22 18:07:55 143
原创 Scala:基础语法
声明变量1. 声明val变量:可以声明val变量来存放表达式的计算结果val result = 1 + 1但是常量声明后,是无法改变它的值的,例如,result = 1,会返回error: reassignment to val的错误信息2. 声明var变量:如果要声明值可以改变的引用,可以使用var变量。var myresult = 1,myresult = 2在scala程序...
2018-11-21 14:17:06 228
原创 ES:写入原理详解
(1)数据写入buffer(2)commit point(3)buffer中的数据写入新的index segment(4)等待在os cache中的index segment被fsync强制刷到磁盘上(5)新的index sgement被打开,供search使用(6)buffer被清空每次commit point时,会有一个.del文件,标记了哪些segment中的哪些document...
2018-11-05 17:27:53 16841 11
原创 ES:倒排索引、分词详解
一,倒排索引(Inverted Index)ElasticSearch引擎把文档数据写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表示例:对以下三个文档去除停用词后构造...
2018-11-05 17:09:28 23776 2
原创 ES:基于scoll+bulk+索引别名实现零停机重建索引
1、重建索引一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scoll就查询指定日期的一段数据,交给一个线程即可(1)一开始,依靠dynamic mapping,插入...
2018-11-05 11:41:25 639
原创 ES:定制化自己的dynamic mapping策略
1、定制dynamic策略true:遇到陌生字段,就进行dynamic mappingfalse:遇到陌生字段,就忽略strict:遇到陌生字段,就报错PUT /my_index{ "mappings": { "my_type": { "dynamic": "strict", "properties": { "title": {
2018-11-05 11:17:58 1324
原创 ES:修改分词器以及定制自己的分词器
1、默认的分词器standardstandard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字母转换为小写stop token filer(默认被禁用):移除停用词,比如a the it等等2、修改分词器的设置PUT /my_index{ "settings": { "...
2018-11-02 16:04:35 9232
原创 ES:scoll技术滚动搜索大量数据
如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的采用基于_doc进行排序的...
2018-11-02 15:29:36 1194
原创 ES:搜索引擎内核解密
1、doc values搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内...
2018-11-02 15:16:45 809
原创 ES:定制搜索结果的排序规则
1、默认排序规则默认情况下,是按照_score降序排序的GET /_search{ "query": { "bool": { "filter": { "term": { "author_id": 110 } } } }}GET /_search{ "query": {
2018-11-02 14:19:06 8572
原创 ES:Query DSL搜索语法
1、Query DSL的基本语法{ QUERY_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... }}{ QUERY_NAME: { FIELD_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,.....
2018-11-01 15:00:09 5322 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人