search
搜索
TIGER_XC
一个Scala童鞋
展开
-
search(16)- elastic4s-内嵌文件:nested and join
从SQL来的用户,对于ES的文件关系维护方式会感到很不习惯。毕竟,ES是分布式数据库只能高效处理扁平类型文件,无法支持关系式数据库那样的文件拼接。但是,任何数据库应用都无法避免树型文件关系,因为这是业务模式里的表现形式。在ES里,父-子关系的数据实际上是放在同一个索引index里的,无论nested或join类型的数据。在ES里已经没有数据表(doc_type)的概念。但从操作层面上ES提供了relation类型来支持父-子数据关系操作。所以,nested数据类型一般用来表达比较固定的嵌入数据。因为每...原创 2020-05-23 09:35:32 · 266 阅读 · 0 评论 -
search(15)- elastic4s-sorting buckets
聚合结果buckets默认以doc_count排序方式呈现,即:_count asc 表达。其它还有 _term, _key 为排序控制元素。_key适用于histogram,date_histogram,如下:POST /cartxns/_search{ "aggs": { "colors": { "terms": { "field": "color.keyword", "order": { "_count": "...原创 2020-05-18 15:57:11 · 190 阅读 · 0 评论 -
search(14)- elastic4s-统计范围:global, filter,post-filter bucket
聚合一般作用在query范围内。不带query的aggregation请求实际上是在match_all{}查询范围内进行统计的:GET /cartxns/_search{ "aggs": { "all_colors": { "terms": {"field" : "color.keyword"} } } }}GET /cartxns/_search{ "query": { "match_all": {} }, "aggs": {..原创 2020-05-16 22:40:30 · 294 阅读 · 0 评论 -
search(13)- elastic4s-histograms:聚合直方图
在聚合的分组统计中我们会面临两种分组元素类型:连续型如时间,自然数等、离散型如地点、产品等。离散型数据本身就代表不同的组别,但连续型数据则需要手工按等长间隔进行切分了。下面是一个按价钱段聚合的例子:POST /cartxns/_search{ "size" : 1, "aggs": { "sales_per_pricerange": { "histogram": { "field": "price", "interval": 20000原创 2020-05-15 21:26:13 · 274 阅读 · 0 评论 -
search(12)- elastic4s-聚合=桶+度量
这篇我们介绍一下ES的聚合功能(aggregation)。聚合是把索引数据可视化处理成可读有用数据的主要工具。聚合由bucket桶和metrics度量两部分组成。所谓bucket就是SQL的GROUPBY,如下:GET /cartxns/_search{ "size" : 2, "aggs": { "color": { "terms": {"field": "color.keyword"} } }}... "aggregations" : {.原创 2020-05-12 22:09:24 · 266 阅读 · 0 评论 -
search(11)- elastic4s-模糊查询
很多时候搜索用户对查询语句具有模糊感觉,他们只能提供大约的描述。比如一个语句的部分,或者字句顺序颠倒等。通过模糊查询可以帮助用户更准确的找出他们希望搜索的结果。模糊查询包括前后缀,语句(phrase)查询。前缀查询在非文本查询和全文查询字段中使用是有着不同的效果:在非文本字段查询中我们需要严格按照词字顺序进行匹配,而全文查询中由于目标字段在构建索引时已经进行了分词处理,所以匹配是在分词中进行匹配的。下面是一些非文本前后缀查询的例子:POST /bank/_search{ "query" ..原创 2020-05-10 21:17:57 · 246 阅读 · 0 评论 -
search(10)- elastic4s-multi_match:多字段全文搜索
在全文搜索中我们常常会在多个字段中匹配同一个查询条件或者在不同的字段中匹配不同的条件。比如下面这个例子:GET /books/_search{ "query": { "bool": { "should": [ { "match": { "title": "和平战争" }}, { "match": { "author": "托斯泰" }} ] } } }我们可以用boolQuery来进行查询语句的组合。全..原创 2020-05-09 15:05:46 · 329 阅读 · 0 评论 -
search(9)- elastic4s logback-appender
前面写了个cassandra-appender,一个基于cassandra的logback插件。正是cassandra的分布式数据库属性才合适作为akka-cluster-sharding分布式应用的logger。所以,cassandra-appender核心功能就是对logback消息的存写部分了。同样,基于ES的logback-appender核心部分就是对ES的存写过程了。在ES里这个过程还...原创 2020-05-05 20:47:45 · 390 阅读 · 0 评论 -
search(8)- elastic4s-search-query模式
上篇提过query模式除对记录的筛选之外还对符合条件的记录进行了评分,即与条件的相似匹配程度。我们把评分放在后面的博文中讨论,这篇我们只介绍query查询。查询可以分为绝对值查询和全文查询:绝对值查询是指非text类型字段的查询,全文查询一般指对于text字段的查询。如果需要对text字段进行绝对值查询的话可以用fields在text字段下定义一个keyword字段。text类型字段在建索...原创 2020-04-28 08:55:10 · 597 阅读 · 0 评论 -
search(7)- elastic4s-search-filter模式
现在我们可以进入探讨ES的核心环节:搜索search了。search又分filter,query两种模式。filter模式即筛选模式:将符合筛选条件的记录作为结果找出来。query模式则分两个步骤:先筛选,然后对每条符合条件记录进行相似度计算。就是多了个评分过程。如果我们首先要实现传统数据库的查询功能的话,那么用filter模式就足够了。filter模式同样可以利用搜索引擎的分词功能产生高质...原创 2020-04-26 21:19:01 · 343 阅读 · 0 评论 -
search(6)- elastic4s-CRUD
这篇示范一下elastic4s的CRUD操作。在这之前先更正一下上篇中关于检查索引是否存在的方法。elastic4s的具体调用如下: //删除索引 val rspExists = client.execute(indexExists("company")).await if (rspExists.result.exists) client.execute(dele...原创 2020-04-21 21:14:12 · 206 阅读 · 0 评论 -
search(5)- elastic4s-构建索引
按照计划,这篇开始尝试用elastic4s来做一系列索引管理和搜索操作示范。前面提过,elastic4s的主要功能之一是通过组合Dsl语句形成json请求。那么我们先试试组合一些Dsl语句,再想办法产生出json请求文本,然后在kibana控制台中验证它的正确性。首先看看elastic4s提供的一个show函数: def show(implicit handler: Handl...原创 2020-04-18 20:17:26 · 143 阅读 · 0 评论 -
search(4)- elastic4s-ElasticDsl
上次分析了一下elastic4s的运算框架。本来计划接着开始实质的函数调用示范,不过看过了Elastic4s的所有使用说明文档后感觉还是走的快了一点。主要原因是elasticsearch在7.0后有了很多重点调整改变,elastic4s虽然一直在源代码方面紧跟ES的变化,但使用文件却一直未能更新,所以从说明文档中学习elastic4s的使用方法是不可能的,必须从源码中摸索。花了些时间过了一次...原创 2020-04-16 22:05:48 · 238 阅读 · 0 评论 -
search(3)- elastic4s-QueryDSL
elastic4s是elasticsearch一个第三方开发的scala语言终端工具库(Elastic4s is a concise, idiomatic, reactive, type safe Scala client for Elasticsearch.)。scala用户可以用elastic4s提供的DSL用编程代码形式来构建ES服务请求。与字符型json文本直接编写请求不同的是:在编译...原创 2020-03-22 22:29:26 · 202 阅读 · 0 评论 -
search(2)- elasticsearch scala终端:elastic4s
上篇谈到:elasticsearch本身是一个完整的搜索平台,操作使用是通过终端api进行的。elasticsearch本身提供了多种编程语言的api,包括java的esjava。而elastic4s是一套基于esjava之上的scala api。先看看scala es-client ElasticClient的构建过程: import com.sksamuel.elastic4...原创 2020-03-21 12:13:53 · 458 阅读 · 0 评论 -
search(1)- elasticsearch结构概念
上篇提到选择了elasticsearch ES作为专业化搜索引擎的核心,这篇讨论一下ES的基本结构和应用概念。首先,从硬结构方面来讲:ES是在一个集群(cluster)环境里运行的,所以ES应该具备高可用和高扩展特性,因为系统可以分布在机器内无数个节点(node)服务器上运行。ES的索引(index)在分布在集群中各node上。因为ES是基于lucent的,lucent index 就是集群...原创 2020-03-16 20:04:05 · 195 阅读 · 0 评论 -
search(0)- 企业搜索,写在前面
计划研究一下搜索search,然后写个学习过程系列博客。开动之前先说说学习搜索的目的:不是想开发个什么搜索引擎,而是想把搜索的概念和方法引入到传统的商业信息系统中去。对我来说,传统的管理系统legacy i.t system已经走到了尽头。根本原因是信息在量上的爆发增长,传统数据管理方式已经无法兼顾了。在我看来,除了交易管理,传统的关系数据库方式在业务管理的其它方面,特别是业务相关的数据分析、...原创 2020-02-28 17:06:12 · 187 阅读 · 0 评论