目录 Apache Lucene评分 Elasticsearch的脚本功能 脚本执行过程中可以使用的对象 使用自定义的脚本库 搜索不同语言的内容 使用加权影响得分 加权 function_score查询 索引加权 同义词 同义词过滤器 同义词规则 Apache Lucene评分 计算文档的评分属性时,考虑如下因素: 文档加权:对文档建立索引时,对文档的加权值 字段加权:查询和索引时,对字段的加权 协调:基于文档条数的协调因子.对包含更多查询词条的文档,它提供更大的值 逆文档频率:基于词条的因子,…
ElasticSearch 2 (18) - 深入搜索系列之控制相关度 摘要 处理结构化数据(比如:时间.数字.字符串.枚举)的数据库只需要检查一个文档(或行,在关系数据库)是否与查询匹配. 布尔是/非匹配是全文搜索的基础部分,但不止这些,我们也同样需要知道每个文档与查询的相关度,在全文搜索引擎中我们不仅需要找到匹配的文档,还需要根据他们相关度的高低,对他们进行排序. 全文相关的公式或相似算法(similarity algorithms) 会将多个因素合并起来,为每个文档生成一个相关度分数 *_…
ElasticSearch 2 (15) - 深入搜索系列之多字段搜索 摘要 查询很少是简单的一句话匹配(one-clause match)查询.很多时候,我们需要用相同或不同的字符串查询1个或多个字段,也就是说,我们需要对多个查询语句以及他们相关分数(relevance scores)进行有意义的合并. 有时候或许我们正查找一本名为战争与和平(War and Peace)而作者叫Leo Tolstoy的书,或许我们正用"最少匹配"("minimum should match…
ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我的搜索 *foo-bar* 无法匹配 foo-bar ? 为什么增加更多的文件会压缩索引(Index)? 为什么ElasticSearch占用很多内存? 版本 elasticsearch版本: elasticsearch-2.2.0 内容 图解ElasticSearch 云上的集群 集群里的盒子 云…
文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询过滤语句 一.所使用版本的介绍 使用的是elasticsearch2.4.3版本,在此只是简单介绍搜索部分的api使用 二.简单的搜索 使用api的时候,基本上可以将DSL搜索的所有情况均写出来,在此给出一个最简单搜索的全部的过程以及代码,之后将对不同的搜索只是针对函数进行介绍 (1)DSL搜索 对…
ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我的搜索 *foo-bar* 无法匹配 foo-bar ? 为什么增加更多的文件会压缩索引(Index)? 为什么ElasticSearch占用很多内存? 版本 elasticsearch版本: elasticsearch-2.2.0 内容 图解ElasticSearch 云上的集群 集群里的盒子 云…
ElasticSearch 2 (17) - 深入搜索系列之部分匹配 摘要 到目前为止,我们介绍的所有查询都是基于完整术语的,为了匹配,最小的单元为单个术语,我们只能查找反向索引中存在的术语. 但是,如果我们想匹配部分术语而不是全部改怎么办?部分匹配(Partial matching) 允许用户指定查找术语的一部分,然后找出所有包含这部分片段的词. 与我们想象的不一样,需要对术语进行部分匹配的需求在全文搜索引擎的世界并不常见,但是如果读者有SQL方面的背景,可能会在某个时候使用下面的SQL语句对…
ElasticSearch 2 (16) - 深入搜索系列之近似度匹配 摘要 标准的全文搜索使用TF/IDF处理文档.文档里的每个字段或一袋子词.match 查询可以告诉我们哪个袋子里面包含我们搜索的术语,但这只是故事的一部分.它并不能告诉我们词语之间的关系. 考虑下面句子的区别: Sue ate the alligator. The alligator ate sue. Sue never goes anywhere without her alligator-skin purse. 一个 m…
ElasticSearch 2 (14) - 深入搜索系列之全文搜索 摘要 在看过结构化搜索之后,我们看看怎样在全文字段中查找相关度最高的文档. 全文搜索两个最重要的方面是: 相关(relevance) 相关是将查询到相关的文档结果进行排名的一种能力,这种相关度可以是根据TF/IDF.地理位置相似性(geolocation).模糊相似,或者其他的一些算法得出. 分析(analysis) 将一个文本块转换为唯一的.规范化的token的过程,目的是为了(a)创建反向索引以及(b)查询反向索引. 当我…
ElasticSearch 2 (13) - 深入搜索系列之结构化搜索 摘要 结构化查询指的是查询那些具有内在结构的数据,比如日期.时间.数字都是结构化的.它们都有精确的格式,我们可以对这些数据进行逻辑操作,比较常见的操作包括比较时间区间,或者获取两个数字间的较大值. 文本也可以是结构化的.比如彩笔可以有红.绿.蓝颜色集合,一个博客可以有关键字标签 分布式 和 搜索 . 电商网站上的商品都有UPC(Universal Product Codes)或者其他需要严格结构化格式的唯一标识. 在结构化查…
1. 普通match如何转换为term+should { "match": { "title": "java elasticsearch"}} 使用诸如上面的match query进行多值搜索的时候,es会在底层自动将这个match query转换为bool的语法,bool should,指定多个搜索词,同时使用term query { "bool": { "should": [ { "term&…
1. 为帖子增加标题字段 POST /forum/article/_bulk { "} } { "doc" : {"title" : "this is java and elasticsearch blog"} } { "} } { "doc" : {"title" : "this is java blog"} } { "} } { "doc&qu…
本章讨论搜索速度优化:搜索速度与系统资源.数据索引方式.查询方式等多方面 1.为文件系统cache预留足够的内存 1)应用程序一般情况下,读写都会被操作系统“cache” 2)cache保存在物理内存中,命中cache可以降低对磁盘的读写频率 3)搜索对系统cache很依赖,如果搜索从磁盘读取数据,则一定会产生相对较高的延迟 4)应该至少为系统cache预留一般的可用内存,更大内存可以有更高的cache命中率 5)线上应禁用swap 2.使用更快的硬件 1)写入对CPU更敏感.而搜索对IO能力需…
Openwrt_Linux_crontab任务_顺序执行脚本 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-12-21. Linux (openwrt,debian,centos...) 中 crontab 的任务太多,不想挤在一起同时执行 可以考虑放到一个shell脚本中顺序执行.这样,机器的负荷就不会在那些特定的时间点暴增. crontab 中 只需要加入一行*/5 * * * * /path.../runTaskInSequence.sh,每5分钟执行一次即可. #!/…
1.根据用户ID.是否隐藏.帖子ID.发帖日期来搜索帖子 (1)插入一些测试帖子数据 POST /forum/article/_bulk { "index": { "_id": 1 }} { "articleID" : "XHDK-A-1293-#fJ3", "userID" : 1, "hidden": false, "postDate": "2017-0…
一.搜索API 1. 搜索API 端点地址 从索引tweet里面搜索字段user为kimchy的记录 GET /twitter/_search?q=user:kimchy 从索引tweet,user里面搜索字段user为kimchy的记录 GET /twitter/tweet,user/_search?q=user:kimchy GET /kimchy,elasticsearch/_search?q=tag:wow 从所有索引里面搜索字段tag为wow的记录 GET /_all/_search?…
作者:robben,腾讯高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 导语:互联网产品中的检索功能随处可见.当你的项目规模是百度大搜|商搜或者微信公众号搜索这种体量的时候,自己开发一个搜索引擎,加入各种定制的需求和优化,是非常自然的事情.但如果只是普通的中小型项目甚至创业团队|创业项目,直接拿轮子则是更合理的选择.ElasticSearch就是这样一个搜索引擎的轮子.更重要的是,除去常规的全文检索功能之外,它还具有基础的统计分析功能(最常见的就是聚合),这也让他变得…
上一篇提到的轻量搜索非常简单便捷,但是通过请求体查询可以更充分的利用查询的强大功能.因为_search api中大部分参数是通过HTTP请求体而非查询字符串来传递的. 一 空查询 对于空查询来说,最简单的方式就是传入一个空的请求体,获取所有文档(默认返回前10个完整文档内容) GET /_search {} 你也可以使用from 和 size参数 GET /_search { , } 这样的方式来查询第11条到15条的文档 大家可能会好奇,这明明是一个GET请求方式,为何可以有请求体.事实上这个…
本文大概地介绍了ES的原理,以及Wetest在使用ES中的一些经验总结.因为ES本身涉及的功能和知识点非常广泛,所以这里重点挑出了实际项目中可能会用到,也可能会踩坑的一些关键点进行了阐述. 一 重要概念 集群(Cluster):ES是一个分布式的搜索引擎,一般由多台物理机组成.这些物理机,通过配置一个相同的cluster name,互相发现,把自己组织成一个集群. 节点(Node):同一个集群中的一个 Elasticearch主机. 主分片(Primary shard):索引(下文介绍)的一个物…
结构化搜索 结构化搜索(Structured search) 是指有关探询那些具有内在结构数据的过程.比如日期.时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作.比较常见的操作包括比较数字或时间的范围,或判定两个值的大小. 文本也可以是结构化的.如彩色笔可以有离散的颜色集合: 红(red) . 绿(green) . 蓝(blue) .一个博客可能被标记了关键词 分布式(distributed) 和 搜索(search) .电商网站上的商品都有 UPCs(通用产品码 Uni…
什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能. 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索领域,但是操作复杂繁琐,总是让开发者敬而远之.而 Elasticsearch将 Lucene 作为其核心来实现所有索引和搜索的功能,通过简单的 RESTful 语法来隐藏掉 Lucene 的复杂性,从而让全文搜索变得简单 ES在Lucene基础上,提供了一些分布式的实现:集群,分片,复制等. 搜索为什么不用MySQL而…
在做搜索的时候,下拉联想词的搜索肯定是最常见的一个场景,用户在输入的时候,要自动补全词干,说得简单点,就是以...开头搜索,如果是数据库,一句SQL就很容易实现,但在elasticsearch如何实现呢? 大家可能会立马想到用elasticsearch自带的suggest功能,确实,在一些初级应用场景,特别是数据量比较少的情况下,suggest可以快速简易的解决问题. 在数据量比较大的时候,性能有待提高,而且遇到复杂场景,suggest就会显得力不从心,看下面一个需求: 1.下拉结果需要根据城市…
  跨字段实体搜索  » 多数字段编辑 全文搜索被称作是 召回率(Recall) 与 精确率(Precision) 的战场: 召回率 ——返回所有的相关文档:精确率 ——不返回无关文档.目的是在结果的第一页中为用户呈现最为相关的文档. 为了提高召回率的效果,我们扩大搜索范围 ——不仅返回与用户搜索词精确匹配的文档,还会返回我们认为与查询相关的所有文档.如果一个用户搜索 “quick brown box” ,一个包含词语 fast foxes 的文档被认为是非常合理的返回结果. 如果包含词语 fa…
一 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档: 示例 GET 127.0.0.1:9200/_search 响应 { , "timed_out": false, "_shards": { , , , }, "hits": { , , "hits": [ { "_index": "test", "_type":…
1. 为帖子数据增加content字段 POST /forum/article/_bulk { "} } { "doc" : {"content" : "i like to write best elasticsearch article"} } { "} } { "doc" : {"content" : "i think java is the best programmin…
通过logstash搜集日志 这里搜集日志可以使用ELK的一个插件filebeat对日志进行处理,并传输到后端的程序 在这里有一个不好的地方, 如果想要直接使用filebeat将日志发送到elasticsearch的话, 它并不能对任何字段进行替换等处理 比较明显的问题就是, 一般我们需要将@timestamp替换成日志里面的时间而不是程序对日志的处理时间, 这一点它无法做到 还有一点, 使用filebeat对多行日志进行处理时似乎会发生日志收集错乱的现象, 这个问题有待测试, 因为filebe…
Elasticsearch Java API有四类client连接方式:TransportClient.  RestClient .Jest. Spring_Data_Elasticsearch.其中TransportClient.  RestClient是Elasticsearch原生的api,TransportClient会在8.0版本中完成删除,替代的是HighLevelRestClient,它使用HTTP请求而不是Java序列化请求.Spring_Data_Elasticsearch是s…
概要 本篇介绍怎样在全文字段中搜索到最相关的文档,包含手动控制搜索的精准度,搜索条件权重控制. 手动控制搜索的精准度 搜索的两个重要维度:相关性(Relevance)和分析(Analysis). 相关性是评价查询条件与结果的相关程度,并对相关程度进行排序,一般使用TF/IDF方法. 分析是指将索引文档与查询条件规范化的一个过程,目的是建立倒排索引时,尽可能地提升召回率. match查询原理 匹配查询match是核心查询语法,它的主要应用场景就是全文搜索,我们举一个示例: GET /music/c…
概要 本篇介绍一下multi_match的best_fields.most_fields和cross_fields三种语法的场景和简单示例. 最佳字段 bool查询采取"more-matches-is-better"匹配越多分越高的方式,所以每条match语句的评分结果会被加在一起,从而为每个文档提供最终的分数_score.能与两条语句同时匹配的文档会比只与一条语句匹配的文档得分要高,但有时这样也会带来一些与期望不符合的情况,我们举个例子: 我们以英文儿歌为案例背景,我们这样搜索: G…
  跨字段实体搜索  » 多数字段编辑 全文搜索被称作是 召回率(Recall) 与 精确率(Precision) 的战场: 召回率 --返回所有的相关文档:精确率 --不返回无关文档.目的是在结果的第一页中为用户呈现最为相关的文档. 为了提高召回率的效果,我们扩大搜索范围 --不仅返回与用户搜索词精确匹配的文档,还会返回我们认为与查询相关的所有文档.如果一个用户搜索 "quick brown box" ,一个包含词语 fast foxes 的文档被认为是非常合理的返回结果. 如果包含…