分布式全文搜索引擎ES

                                ES

什么是ES文档操作:

  1.ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

  2.ES文档元素:

    1._index:索引库,类似于关系型数据库里的“数据库”—它是我们存储和索引关联数据的地方。

    2._type:在应用中,我们使用对象表示一些“事物”。

    3.id:与 _index  和 _type  组合时,就可以在ELasticsearch中唯一标识一个文档。

    4._source:文档原始数据。

    5._all:所有字段的连接字符串

文档的增删改操作(resfoull风格):

  1.PUT {index}/{type}/{id}

  2.POST {index}/{type}

  3.GET itsource/employee/1?employee

DSL查询过滤:

  什么是查询过滤:只查出你想要的信息  屏蔽多余的信息

  DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现

   GET _search

  

DSL过滤和DSL查询在性能上的区别 :

过滤结果可以缓存并应用到后续请求。

查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存。

过滤语句可有效地配合查询语句完成文档过滤。

分词与映射:

  为什么要分词与映射:

在全文检索理论中,文档的查询是通过关键字查询文档索引来进行匹配,因此将文本拆分为有意义的单词,对于搜索结果的准确性至关重要,因此,在建立索引的过程中和分析搜索语句的过程中都需要对文本串分词。

ES中分词需要对具体字段指定分词器等细节,因此需要在文档的映射中明确指出。

  IK分词器:源码下载地址

    https://github.com/medcl/elasticsearch-analysis-ik

集群操作:

  为什么要使用集群:

    处理高并发数据  单点故障和大量的数据的时候就要需要用到集群

Node有三种节点:

master Node:主节点,维护集群信息 索引库操作

data  node:数据节点,  文档crud

client node:只负责处理用户请求

1、默认情况下,每个节点都有成为主节点的资格,也会存储数据,还会处理客户端的请求。- 在生产环境下,如果不修改ElasticSearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题

2、在一个生产集群中我们可以对这些节点的职责进行划分。建议集群中设置3台以上的节点作为master节点【node.master: true node.data: false】,这些节点只负责成为主节点,维护整个集群的状态。

3、再根据数据量设置一批data节点【node.master: false node.data: true】,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。

4、在集群中建议再设置一批client节点【node.master: false node.data: true】,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。

JavaAPI操作集群:

  什么是JavaAPI:ES对Java提供一套操作索引库的工具包,即Java API。所有的ES操作都使用Client对象执行。

第一:引入包

<dependency>

<groupId>org.elasticsearch.client</groupId>

<artifactId>transport</artifactId>

<version>5.2.2</version>

</dependency>

<dependency>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-api</artifactId>

<version>2.7</version>

</dependency>

<dependency>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-core</artifactId>

<version>2.7</version>

</dependency>

第二:连接ES获取client对象

  

Settings settings = Settings.builder()

.put("client.transport.sniff", true).build();

TransportClient client = new PreBuiltTransportClient(settings);

第三 创建文档索引:

import static org.elasticsearch.common.xcontent.XContentFactory.*;

IndexResponse response = client.prepareIndex("crm", "vip", "1")

.setSource(jsonDataText).get();

第四 获取文档:

GetResponse response = client.prepareGet("crm", "vip", "1").get();

下面就是增删改的代码:

  改:

client.prepareUpdate("crm", "vip", "1").setDoc("{\"sex\":0}").get();

或client.prepareUpdate("crm", "vip", "1")

.setScript(new Script("ctx._source.sex = 1"  , ScriptService.ScriptType.INLINE,null, null))

.get();

IndexRequest indexRequest = new IndexRequest("crm", "vip", "1")

.source(originalJsonData);

UpdateRequest updateRequest = new UpdateRequest("crm", "vip", "1")

.doc(updateJsonData).upsert(indexRequest);

client.update(updateRequest).get();

  删:

DeleteResponse response = client.prepareDelete("crm", "vip", "1").get();

  批量添加:

BulkRequestBuilder bulkRequest = client.prepareBulk();

bulkRequest.add(client.prepareIndex("crm", "vip", "1")

.setSource(vip1JsonData));

bulkRequest.add(client.prepareIndex("crm", "vip", "2")

.setSource(vip2JsonData));

BulkResponse bulkResponse = bulkRequest.get();

原文地址:https://www.cnblogs.com/1999wang/p/11517626.html

时间: 2024-11-07 16:06:07

分布式全文搜索引擎ES的相关文章

ES(ElasticSearch)分布式全文搜索引擎

1.什么是ES**ES** 全称 **ElasticSearch** 是一种分布式全文搜索引擎,基于Lucene(全文搜索框架)开发而来.Lucene是公认的迄今为止的最好用的搜索引擎库,但是他所提供的API对于我们使用者来说,是非常苦恼的,常要花费大量时间去熟悉学习.ES的出现就很好的解决了这个问题,良好的封装,易用的API,链式书写方式,开瓶即饮.2.ES特点**ES** 虽然是以Lucene核心库开发的,但是却不是以它作为核心,**ES** 的贴点体现在: *分布式实时文件存储,每个字段皆

3.高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建

高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建 如果大家看了我的上一篇<2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离>文章,如果能很好的利用,那么其实已经可以轻松日抗千万级别的访问量了,但是如果业务涉及查询比较多,查询条件比较丰富,又或者我就想要查询的响应更快点,那么在mysql上面去做优化,其实比较辛苦,有没有更好的解决方案呢?答案是肯定的!它就是我们今天的主角,分布式全文搜索引擎elasticsearch. 技巧提示:mysql集群层主要

ElasticSearch(分布式全文搜索引擎)

1.Lucene的优化, 实现了高可用的分布式集群的搜索方案 2.首先,ES的索引库管理支持依然是基于Apache Lucene(TM)的开源搜索引擎.ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单. 3.ES的特点 a)  分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 可以扩展到上百台服务器,处理PB级结构化或非结构化数据 高度集成化的

分布式全文搜索引擎ElasticSearch—超详细

1 ElasticSearch 1.1 ES的概念和特点 ES:全文检索的框架,专门做搜索,支持分布式.集群.封装的Lucene. 特点: 原生的Lucene使用的不足,优化了Lucene的调用方式 高可用的分布式集群,处理PB级别的数据 目的是通过简单的restful API来隐藏Lucene的复杂性,从而使全文检索变得简单,达到“开瓶即饮”的效果 Lucene:全文检索,api比较麻烦,操作全文检索的最底层技术. 核心:创建索引,搜索索引 1.2 ES的对手 Solr和ES的区别: (1)

分布式全文搜索引擎——Elasticsearch

1.安装Elasticsearch a.下载:从官网下载 Elasticsearch,地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch b.启动:解压后,在 bin 目录打开 elasticsearch.bat 启动服务 c.访问:在浏览器中访问 http://127.0.0.1:9200/ 检查是否安装成功 注意:端口9300:Java程序访问的端口:端口9200:浏览器访问的端口 Elasticsearch

分享课程Scrapy分布式爬虫之ES搜索引擎网站

Scrapy分布式爬虫之ES搜索引擎网站 分享网盘地址--https://pan.baidu.com/s/1oAsW3Se 密码: tmtx 备用地址(腾讯微云):http://url.cn/51n4soD密码:SyRADx 大数据时代到来,信息更新非常快速,各行各业如果不与时俱进,都将面临优胜劣汰,知识是不断更新的,只有拥有一技之长,才能立于不败之地.网络爬虫,即Web Spider,是一个很形象的名字.目前爬虫开发语言的主要是python,本课程结合几个小的爬虫案例,帮助学员更好的学习爬虫.

全文搜索引擎Elasticsearch初探

前言: 在Web应用或后台数据管理中,随着数据量的倍数增长,搜索引擎特别是全文搜索引擎的应用越来越迫切.基于技术和成本考虑,我们不可能去开发一个搜索引擎以满足我们的需求,庆幸的是业界已有许多优秀的开源搜索引擎可供我们使用,Elasticsearch便是其中之一. 简介: Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库.但是,Lucene只是一个库.想要使用它,你

全文搜索引擎 ElasticSearch 还是 Solr?

最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量同步,而且是其他团队在维护,依赖性太强,导致 Solr 服务一出问题,我们的项目也基本瘫痪,因为所有的依赖查询都无结果数据了.所以考虑开发一个适配层,如果 Solr 搜索出问题,自动切换到新的搜索--ES. 其实可以通过 Solr 集群或者服务容错等设计来解决该问题.但是先不考虑本身设计的合理性,领导需要开发,所以我开始踏上了搭建 ES 服务的道路,从零开始

全文搜索引擎 Elasticsearch 入门

1. 百科 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 2. 安装 依赖Java8,本文在Linux上运行 下载.解压 $ wget https://artifacts.elastic.co/downloads/ela