zoukankan      html  css  js  c++  java
  • Elasticsearch入门

    1、ES9300端口号与9200区别
    2、Elasticsearch倒排索引原理
    3、Elasticsearch高级查询
    4、ElasticsearchIK分词器原理
    5、ElasticsearchIK中文分词器
    6、IK自定义中文词典热词
    7、Elasticsearch Mapping映射

    1.区别:

    9300与9200区别

    9300端口: ES节点之间通讯使用
    9200端口: ES节点 和 外部 通讯使用

    9300是TCP协议端口号,ES集群之间通讯端口号

    9200端口号,暴露ES RESTful接口端口号       kabana就是用的这个哈  Put /xxxxxxx...     Get /xxxxx

    修改下面:

     访问:  与之对应呀!

     

    Restful 接口 对文档进行操作 进行增删改查~

    2.倒排索引

      为什么倒排索引比B+数查询速率还要快?

      

    正向索引

    正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。

    这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。     

    尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。

    倒排索引

    倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。

    由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。

     

     

    正排索引是从文档到关键字的映射(已知文档求关键字),倒排索引是从关键字到文档的映射(已知关键字求文档)。

     

      比如:

       

    文档内容:

    序号

    文档内容

    1

    小俊是一家科技公司创始人,开的汽车是奥迪a8l,加速爽。

    2

    小薇是一家科技公司的前台,开的汽车是保时捷911

    3

    小红买了小薇的保时捷911,加速爽。

    4

    小明是一家科技公司开发主管,开的汽车是奥迪a6l,加速爽。

    5

    小军是一家科技公司开发,开的汽车是比亚迪速锐,加速有点慢

     

    倒排索引会对以上文档内容进行关键词分词,可以使用关键次直接定位到文档内容。

     

    单词ID

    单词

    倒排列表docId

    1

    1,2,3,4,5

    2

    一家

    1,2,4,5

    3

    科技公司

    1,2,4,5

    4

    开发

    4,5

    5

    汽车

    1,2,4,5

    6

    奥迪

    1,4

    7

    加速爽

    1,3,4

    8

    保时捷

    2,3

    9

    保时捷911

    2

    10

    比亚迪

    5

    搜索 “奥迪”  

    传统的正向索引:   去每个文档搜索

              倒排索引:   基于文档内容进行关键词分词,利用关键词定位       就是个词库

    3.高级查询

      简单查询:

       GET /toov5/user/2 

     查询user(表)下面的所有数据:

      GET /toov5/user/_search  

     根据多个Id查询:

    GET /toov5/user/_mget
    {
    "ids":["1","2"]
    }

     查询年龄为66的:

     GET  /toov5/user/_search?q=age:66

     复杂条件:区间  10到70的

     GET  /toov5/user/_search?q=age:[10 TO  70]

     对年龄降序排列:

    GET  /toov5/user/_search?q=age:[10 TO  70]&sort=age

     分页查询

     GET  /toov5/user/_search?q=age:[10 TO  70]&sort=age:desc&from=0&size=2     #前两条数据

    DSL语言查询与过滤

    es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。
    由于DSL查询更为直观也更为简易,所以大都使用这种方式。
    DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式。

    ##term 是精确匹配  不做分词查询!  

    GET toov5/user/_search
    {
    "query": {
    "term": {
    "age": 66
    }
    }

    }

    竞争对手是 like  哈哈   模糊查询   马云相关的    match支持分词查询  “马”

    GET toov5/user/_search
    {
    "query": {
    "match": {
    "name": "马"
    }
    }

    }

    term查询不会对字段进行分词查询,会采用精确匹配。  也可以做分页

    match会根据该字段的分词器,进行分词查询。

    把马云拆了  哈哈   

    分页:

    GET toov5/user/_search
    { "from":0,
    "size": 2,
    "query": {
    "match": {
    "name": "马"
    }
    }
    }

    还有 filter多虑    年龄大于21 小于51岁的    _source表示限制展示哪些字段

    GET /toov5/user/_search
    {
    "query": {
    "bool": {
    "must": [{
    "match_all": {}
    }],
    "filter": {
    "range": {
    "age": {
    "gt": 21,
    "lte": 51
    }
    }

    }

    }

    },
    "from": 0,
    "size": 10,
    "_source": ["name", "age"]

    }

  • 相关阅读:
    linux中解压.tgz, .tar.gz ,zip ,gz, .tar文件
    hook(v16.7测试)?
    React优点?
    Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
    说说数据库连接池工作原理和实现方案?
    short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
    Oracle的数据优化(经常被问到)?
    存储过程和函数的区别?
    Collection 和 Collections的区别?
    说说数据库连接池工作原理和实现方案?
  • 原文地址:https://www.cnblogs.com/toov5/p/10296818.html
Copyright © 2011-2022 走看看