全文搜索引擎 Elasticsearch 入门

1. 百科

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2. 安装

依赖Java8,本文在Linux上运行

下载、解压

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/ 

启动

curl localhost:9200

返回

$curl localhost:9200
{
  "name" : "Jt1bemT",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "I_R2FCz8SUypT80rkbLeKw",
  "version" : {
    "number" : "5.5.1",
    "build_hash" : "19c13d0",
    "build_date" : "2017-07-18T20:44:24.823Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}  

默认是只能本地调用,设置远程访问:

修改config/elasticsearch.yml

network.host: 0.0.0.0

重启,还是访问不了,报错

ERROR: [1] bootstrap checks failed
[1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk  

原因:这是在因为Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动

修改

在elasticsearch.yml中配置bootstrap.system_call_filter为false

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

启动,就可以通过:ip:port访问了

3. 基本概念

Node与Cluster

Elastic本质是一个分布式数据库,允许多台服务器协同工作,每台机器可以运行多个Elastic实例。

单个Elastic实例称为一个节点(Node),一组节点构成一个集群(Cluster)

Index

Elastic会索引所有的字段,经处理后写入一个反向索引。查找数据时,直接查找该索引。

所以Elastic数据管理的顶层单位交Index,它是单个数据库的同义词(注:每个索引必须是小写)

查看当前节点所有的Index

curl -X GET ‘http://localhost:9200/_cat/indices?v‘

Document

Index里面的记录称为Document,许多Document构成一个Index

Document采用的设计Json格式

同一个Index里的Document不要求有相同的结构,但是最好一样,这样利于提高搜索效率。

Type

Document分组,比如地体有1号线、2号线。不同的Type里应有相同的结构

可以通过以下命令查看一个Index中所有的Type

curl ‘localhost:9200/_mapping?pretty=true‘

存储结构和关系数据库对比

关系数据库       ⇒ 数据库        ⇒ 表          ⇒ 行             ⇒ 列(Columns)

Elasticsearch  ⇒ 索引(Index)   ⇒ 类型(type)  ⇒ 文档(Docments)  ⇒ 字段(Fields)     

4. 增加和删除Index

curl -X PUT ‘localhost:9200/subway‘

新建了一个叫subway的Index,返回

{"acknowledged":true,"shards_acknowledged":true}  

删除叫subway的Index

curl -X DELETE ‘localhost:9200/subway‘

5. 中文分词设置

安装中文分词插件,如ik

$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip

重启Elastic,就可以加载安装的ik了。

下面新建一个Index,指定需要分词的字段。

$ curl -X PUT ‘localhost:9200/accounts‘ -d ‘
{
  "mappings": {
    "person": {
      "properties": {
        "user": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        },
        "desc": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        }
      }
    }
  }
}‘

上述代码新建了名叫accounts的Index,名叫person的Index,person里有3个字段

  • user
  • title
  • desc

这3个都是中文,并且都是文本(text),所以需要指定中文分词,而不使用英文分词器

search_analyzer指定:ik_max_word,指明实用ik对文本进行最大数量的分词

6. 增删改

新增3条记录

curl -X PUT ‘http://10.125.15.70:9200/accounts/person/zs‘ -d ‘{"user":"张三","title":"数据库工程师","desc":"数据库管理"}‘
curl -X PUT ‘http://10.125.15.70:9200/accounts/person/ls‘ -d ‘{"user":"李四","title":"运维工程师","desc":"系统维护"}‘
curl -X PUT ‘http://10.125.15.70:9200/accounts/person/ww‘ -d ‘{"user":"王五","title":"开发工程师","desc":"软件开发"}‘

curl -X DELETE ‘http://10.125.15.70:9200/accounts/person/zs‘

curl -X PUT ‘localhost:9200/accounts/person/ls‘ -d ‘{"user" : "李四2","title" : "工程师","desc" : "软件开发"}‘

7. 查

返回所有记录

curl ‘localhost:9200/accounts/person/_search‘

结果

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "accounts",
        "_type" : "person",
        "_id" : "ls",
        "_score" : 1.0,
        "_source" : {
          "user" : "李四2",
          "title" : "工程师",
          "desc" : "软件开发"
        }
      },
      {
        "_index" : "accounts",
        "_type" : "person",
        "_id" : "ww",
        "_score" : 1.0,
        "_source" : {
          "user" : "王五",
          "title" : "开发工程师",
          "desc" : "软件开发"
        }
      }
    ]
  }
}

全文搜索

curl ‘localhost:9200/accounts/person/_search‘ -d ‘{"query":{"match":{"title":"工程"}}}

结果

{
    "took": 21,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 0.5649868,
        "hits": [{
            "_index": "accounts",
            "_type": "person",
            "_id": "ww",
            "_score": 0.5649868,
            "_source": {
                "user": "王五",
                "title": "开发工程师",
                "desc": "软件开发"
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "ls",
            "_score": 0.5063205,
            "_source": {
                "user": "李四2",
                "title": "工程师",
                "desc": "软件开发"
            }
        }]
    }
}

逻辑运算

OR

curl ‘localhost:9200/accounts/person/_search‘  -d ‘{"query" : { "match":{ "desc":"系统 开发" }}}‘

AND

curl ‘localhost:9200/accounts/person/_search‘  -d ‘"query": {"bool": {"must": [{ "match": { "desc": "软件" } }, { "match": { "desc": "开发" } }]}}}‘

参考

Elasticsearch5.2.0部署过程的坑

全文搜索引擎 Elasticsearch 入门教程

原文地址:https://www.cnblogs.com/kaituorensheng/p/10331791.html

时间: 2024-10-13 15:42:15

全文搜索引擎 Elasticsearch 入门的相关文章

全文搜索引擎 Elasticsearch 入门教程

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Github 都采用它. Elastic 的底层是开源库 Lucene.但是,你没法直接用 Lucene,必须自己写代码去调用它的接口.Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用. 本文从零开始,讲解如何使用 Elastic 搭建自己的全文搜索引擎.每一步都

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

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

全文搜索引擎Elasticsearch初探

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

全文搜索引擎 Elasticsearch 介绍

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Github 都采用它. Elastic 的底层是开源库 Lucene.但是,你没法直接用 Lucene,必须自己写代码去调用它的接口.Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用. 原文地址:https://www.cnblogs.com/jacksonxi

全文搜索引擎 ElasticSearch 还是 Solr?

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

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

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

全文搜索引擎ElasticSearch学习记录:mac下安装

最近开发组培训了ElasticSearch,准备开展新项目,我也去凑了下热闹,下面把学习过程记录一下. 一.安装 1.环境需要jdk1.8; 2.下载:http://www.elastic.co/downloads/elasticsearch 3.下载完成后在端终解压,解压命令:tar -vxf elasticsearch-6.2.4.tar 二.启动elasticSearch 进入文件夹:cd elasticsearch-6.2.4 启动命令:sh ./bin/elasticsearch 如下

分布式全文搜索引擎——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

ElasticSearch入门 附.Net Core例子

1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎.它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档. Elasticsearch是用Java开发的,根据Apache许可条款作为开源发布. ----来自维基百科的解释 我个人的理解是Elasticsearch(以下简称ES)是一个支持分布式的全文搜索引擎,因为在海量数据搜索时,普通关系型.非关系型数据库因为IO读取.处理器运算能力的限制,导致查询效率难以提升,