zoukankan      html  css  js  c++  java
  • ElasticSearch

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

    Lucene是什么?

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
    Lucene 是一个高效的,基于Java 的全文检索库。

    全文检索应用场景:

    比如一个网站的博文搜索,一篇文章一般要1000多文字,别人搜索的时候输入的可能是标题中出现过的文字,也可能是内容里面出现过的文字,而且一般还可能用空格隔开来表示出现任意一个。
    这个时候你如果用数据库,怎么来完成这种搜索呢?like?
    因为like要求的是文本连续性(比如,输入“查询结果”,用数据库,你肯定写 '%查询结果%',这样如果一篇博文里面出现了“查询的结果”,你肯定搜索不出来),且一般都不会走数据库索引。
    如果这么做了,那博文多了,是不是会效率非常低下?而且查询结果不全面与准确。这个时候,就要用Lucene了,在Lucene中建立博文的索引,然后直接通过Lucene来返回一个像百度一样呈现出的搜索结果概要页,然后让搜索的人自己选择去看哪个。

    倒排索引

    Lucene的核心是倒排索引`
     `倒排索引即关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。
    

    img

    文档列表

    img

    简单的倒排索引

    Docker 安装 ElasticSearch

    1.创建目录,目录结构树如下:

    img

    目录结构

    2.创建docker-ompose配置文件elasticsearch.yml

    version: '3'
    services:
         es-master:
           image:  elasticsearch:6.4.3
           container_name: es-master
           restart: always
           volumes:
             - ./master/data:/usr/share/elasticsearch/data:rw
             - ./master/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
             - ./master/logs:/user/share/elasticsearch/logs:rw
           ports:
             - "9200:9200"
             - "9300:9300"
    
    #     es-node1:
    #       image:  elasticsearch:6.4.3
    #       container_name: es-node1
    #       restart: always
    #       volumes:
    #         - ./node1/data:/usr/share/elasticsearch/data:rw
    #         - ./node1/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    #         - ./node1/logs:/user/share/elasticsearch/logs:rw
    #     es-node2:
    #       image:  elasticsearch:6.4.3
    #       container_name: es-node2
    #       restart: always
    #       volumes:
    #         - ./node2/data:/usr/share/elasticsearch/data:rw
    #         - ./node2/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    #         - ./node2/logs:/user/share/elasticsearch/logs:rw
         es-head:
           image: tobias74/elasticsearch-head:6
           container_name: es-head
           restart: always
           ports:
           - "9100:9100"   
    

    3.Elastic服务器配置文件 conf/elasticsearch.yml

    network.bind_host: 0.0.0.0
    cluster.name: elastic-cluster
    network.host: 0.0.0.0
    discovery.zen.minimum_master_nodes: 1
    bootstrap.memory_lock: true
    discovery.type: single-node
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    

    主要配置项说明:

    • cluster.name 集群的名字,默认是docker-cluster
    • discovery.zen.minimum_master_nodes 如果你确定是单机模式,请设置为1,官方文档是这么说
    • bootstrap.memory_lock 如果你系统没有关闭交换分区,请把该参数设置为true
    • discovery.type 单节点模式
    • http.cors.enabled 和 http.cors.allow-origin 主要给elasticsearch-head插件跨域访问使用,否则一直报406的http错误

    4.执行docker-compose

    docker-compose -f elasticsearch.yml up
    

    ES与RMDB区别

    img

    ES与RMDB区别

    索引根据通配符搜索

    • 搜索所有index,所有type下的所有数据:/_search
    • 同时搜索两个index下的数据:/index1,index2/_search
    • 按照通配符去匹配多个索引:/1,2/_search
    • 搜索一个index下指定的type的数据:/index1/type1/_search
    • 搜索一个index下多个type的数据:/index1/type1,type2/_search
    • 搜索多个index下的多个type的数据:/index1,index2/type1,type2/_search
    • 搜索所有index下的指定type的数据:/_all/type1,type2/_search(_all代表所有index)
  • 相关阅读:
    python CreateUniqueName()创建唯一的名字
    node 创建静态服务器并自动打开浏览器
    基于jQuery 的插件开发
    Fetch
    纯css 来实现下拉菜单
    javascript模板引擎之
    jquery jsonp 跨域
    数据库增删改查
    Promise
    Vue.js
  • 原文地址:https://www.cnblogs.com/snake107/p/11938923.html
Copyright © 2011-2022 走看看