最近在做搜索推荐相关的需求,有一个场景中需要某一列能处理多种分词器的分词匹配,比如我输入汉字或拼音或语义相近的词都需要把匹配结果返回回来。经过一番调研,最终我们选择了elasticsearch来处理数据的索引与搜索,在配置分词器时会发现大多分词器配置中都需要配置analyzer、tokenizer、filter,那么这三个东西分别代表着什么,又有什么样的联系呢?这就是本文要重点讨论的事情。关于如何在elasticsearch中使用分词器[1]以及常用的中文分词器[2]和拼音分词器[3]是什么,该怎么样去配置这些问题不是本文要讨论的重点,链接都已经奉上,需要的自取。本文咱们就来聚焦讨论一下analyzer、tokenizer、filter之间的区别与联系。
在 基础入门 中涵盖了基本工具并对它们有足够详细的描述,这让我们能够开始用 Elasticsearch 搜索数据。 用不了多长时间,就会发现我们想要的更多:希望查询匹配更灵活,排名结果更精确,不同问题域下搜索更具体。
REST 即表述性状态传递(英文:Representational State Transfer,简称 REST)是 Roy Fielding 博士在2000年他的博士论文中提出来的一种软件架构风格。REST 是一种规范。即参数通过封装后进行传递,响应也是返回的一个封装对象。一个 REST 的接口就像如下的接口:
结构化搜索是指针对具有内在结构的数据进行检索的过程。比如日期、时间和数字都是结构化的,它们有精确的格式。文本也是可以 格式化的,比如彩色笔的颜色可以有red、green、blue等,文章也可以有关键词,网站商品也都有id等唯一标识。 结构化查询的结果总是非是即否,要么存在结果集中,要么不在。不关心文件的相关度或评分,只有文档的包括或排除处理。
搜索不仅仅是全文本搜索:数据的很大部分是结构化的值例如日期、数字。这部分开始解释怎样以一种高效地方式结合结构化搜索和全文本搜索。
转译:(https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_finding_exact_values) 当进行精确值查找时, 我们会使用过滤器(filters)。过滤器很重要,因为它们执行速度非常快,不会计算相关度(直接跳过了整个评分阶段)而且很容易被缓存。不过现在只要记住:请尽可能多的使用过滤式查询。 term 查询数字编辑 我们首先来看最为常用的 term 查询, 可以用它处理数字
ES的搜索请求执行流程如图1所示。图中索引包含两个分片,每个分片有一个副本分片。在给文档定位和评分后,缺省只会获取排名前10的文档。REST API搜索请求被发送到所连接的节点,该节点根据要查询的索引,将这个请求依次发送到所有的相关分片(主分片或者副本分片)。从所有分片收集到足够的排序和排名信息后,只有包含所需文档的分片被要求返回相关内容。这种搜索路由的行为是可配置的,图1展示的默认行为,称为查询后获取(query_then_fetch)。
当进行精确值查找时, 我们会使用过滤器(filters)。过滤器很重要,因为它们执行速度非常快,不会计算相关度(直接跳过了整个评分阶段)而且很容易被缓存。不过现在只要记住:请尽可能多的使用过滤式查询。
另外ES入门,我强烈推荐这篇Elasticsearch权威搭建指南给你,非常想尽的指南手册。
DSL是Domain Specific Language的缩写,指的是为特定问题领域设计的计算机语言。这种语言专注于某特定领域的问题解决,因而比通用编程语言更有效率。
分析器(Analyzer) 一般由三部分构成,字符过滤器(Character Filters)、分词器(Tokenizers)、分词过滤器(Token filters)。
另外Elasticsearch入门,我强烈推荐ElasticSearch新手搭建手册和这篇优秀的REST API设计指南 给你,这两个指南都是非常想尽的入门手册。
3.分析过程:预备字段内容,并将其转换为可以写放Lucene索引的词项(term)的过程
大家好,我是历小冰。在《为什么 ElasticSearch 比 MySQL 更适合复杂条件搜索》 一文中,我们讲解了 ElasticSearch 如何在数据存储方面支持全文搜索和复杂条件查询,本篇文章则着重分析 ElasticSearch 在全文搜索前如何使用 ik 进行分词,让大家对 ElasticSearch 的全文搜索和 ik 中文分词原理有一个全面且深入的了解。
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询。 举个DSL例子 GET _search { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter"
除了确定文档是否匹配外,查询子句还计算了表示文档与其他文档相比匹配程度的_score。
ES提供了丰富多彩的查询接口,可以满足各种各样的查询要求。更多内容请参考:ELK修炼之道 Query DSL结构化查询 Query DSL是一个Java开源框架用于构建类型安全的SQL查询语句。采用API代替传统的拼接字符串来构造查询语句。目前Querydsl支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。 elasticsearch提供了一整套基于JSON的查询DSL语言来定义查询。 Query DSL当作是一
Elasticsearch中的基本搜索功能可以使用HTTP GET请求实现。以下是在名为my_index的索引中搜索包含"apple"的文档的示例:
从本节开始,先详细介绍Elasticsearch Query DSL语法,该部分是SearchAPI的核心基础之一。
分析(analysis)是在文档被发送并加入倒排索引之前,ES在其主体上进行的操作。在文档被加入索引之前,ES让每个被分析字段经过一系列的处理步骤。
版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/89785223
在Elasticsearch中,处理倒排索引中的分词问题主要涉及两个方面:索引时的分词和查询时的分词。
首先,我们知道倒排索引的原理,我们需要构建一个单词词典,但是这个词典里面的数据怎么来呢?我们需要对输入的东西进行分词。这个ES已经考虑过了,所以它内置了一些分词器,但是中国文化,博大精深,有时候自己断句都会有误差,所以我们会用一些国人的插件进行中文分词。这篇文章的重点也就是介绍ES分词原理、内置分词和中文分词。
本文主要介绍 Elasticsearch 23种最有用的检索技巧,提供了详尽的源码举例,并配有相应的Java API实现,是不可多得的 Elasticsearch 学习&实战资料
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
ElasticSearch 简称为 ES,ES 是一个分布式的开源搜索和分析引擎,适用于文本、数字、地理空间、结构化数据、非结构化数据等数据的搜索。ES 是在 Apache Lucene 的基础上完成开发。由 Elastic 于 2010 年发布。ES 通过其简单的 REST 风格的 API、分布式特性、速度和可扩容闻名世界。是 Elastic Stack 的核心组件。Elastic Stack 是一套用于数据采集、扩充、保存、分析、可视化的开源工具。Elastic Stack 称之为 ELK。目前 ELK 包含一系列丰富的轻量数据采集代理,这些代理被称之为 Beats。
敏锐的读者会注意,目前为止本书介绍的所有查询都是针对整个词的操作。为了能匹配,只能查找倒排索引中存在的词,最小的单元为单个词。
ElasticSearch是一个高度可扩展的开源搜索引擎并使用REST API,所以您值得拥有。 在本教程中,将介绍开始使用ElasticSearch的一些主要概念。
Elasticsearch 查询的响应需要占用 CPU、内存资源,在复杂业务场景,会出现慢查询,需要花费大量的时间。
ES本身不支持SQL数据库的join操作,在ES中定义关系的方法有对象类型、嵌套文档、父子关系和反规范化。
本文详细论述了Elasticsearch全文检索、指定字段检索实战技巧,并提供了详尽的源码举例(微信有字数限制,删除了代码,详见博客)。是不可多得学习&实战资料。 0、前言 为了讲解不同类型ES检索,我们将要对包含以下类型的文档集合进行检索: 1. title 标题; 2. authors 作者; 3. summary 摘要; 4. release data 发布日期; 5. number of reviews 评论数。 首先,让我们借助 bulk API批量创建新的索引并提交数据。 PU
官方网站:https://www.elastic.co/guide/index.html
除了搜索,结合Kibana、Logstash、Beats开源产品,Elastic Stack(简称ELK)还被广泛运用在大数据近实时分析领域,包括:日志分析、指标监控、信息安全等。它可以帮助你探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,通过使用机器学习,自动识别异常状况。
Elasticsearch 除了在搜索方面非常之快,对数据分析也是非常重要的一面。正确理解 Bucket aggregation 对我们使用 Kibana 非常重要。Elasticsearch 提供了非常多的 aggregation 可以供我们使用。其中 Bucket aggregation 对于初学者来说也是比较不容易理解的一个。在今天的这篇文章中,我来重点讲述这个。
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/compound-queries.html
Domain Specific Language 领域专用语言 Elasticsearch provides a ful1 Query DSL based on JSON to define queries Elasticsearch提供了基于JSON的DSL来定义查询。 DSL由叶子查询子句和复合查询子句两种子句组成。
Analysis:文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer)。Analysis是通过Analyzer来实现的。分词就是将文档通过Analyzer分成一个一个的Term(关键词查询),每一个Term都指向包含这个Term的文档。
Elasticsearch中当我们设置Mapping(分词器、字段类型)完毕后,就可以按照设定的方式导入数据。 有了数据后,我们就需要对数据进行检索操作。根据实际开发需要,往往我们需要支持包含但不限于以下类型的检索: 1)精确匹配,类似mysql中的 “=”操作; 2)模糊匹配,类似mysql中的”like %关键词% “查询操作; 3)前缀匹配; 4)通配符匹配; 5)正则表达式匹配; 6)跨索引匹配; 7)提升精读匹配。 细数一下,我们的痛点在于: 1)ES究竟支持哪些检索操作? 2)
《Elasticsearch 权威指南》中,post_filter出现在聚合章节,描述post_filter的作用为:只过滤搜索结果,不过滤聚合结果;
随着企业业务的不断增长和数字化转型的加速,日志和事件数据在Elasticsearch中迅速积累。这些数据中,有很大一部分是旧数据,它们可能不再需要或者不再相关。长时间保留这些数据不仅占用大量存储空间,还会降低Elasticsearch集群的性能。因此,有效地删除旧数据变得至关重要。
官网的翻译可参考:http://blog.csdn.net/dm_vincent/article/details/41693125 Elasticsearch主要功能就是完成模糊检索、字符串匹配,所以使用起来非常方便。而且它有一套自己的匹配规则,来决定把哪项搜索结果展示在前面。
ES提供的批量(bulk)API,可以用来一次索引多篇文档,从而大幅加快索引速度。如图1所示,可以使用http完成这个操作,并且将获得包含全部索引请求结果的答复。
转载出处:https://zhuanlan.zhihu.com/p/29183128 介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。下面介绍了利用Python API接口进行数据查询,方便其他系统的调用。
上篇文章向读者介绍了Elasticsearch中修改数据的操作,使用了Elasticsearch提供的一整套强大的REST API,本文继续来看通过这一套API如何完成文档的基本操作。
官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/term-level-queries.html
领取专属 10元无门槛券
手把手带您无忧上云