ES的使用总结

在项目中根据条件搜索是很常见的功能,但是当数据量比较大时,使用mysql中模糊搜索性能会达到瓶颈。除此之外,我们在购物时商品的搜索也会使用ES来达到快速检索的目地。本文中介绍ES的常见使用,在windows环境中使用的版本为7.10.1,

ES的安装

下载windows版本的ElasticSearch,双击.bat文件,启动后访问 http://localhost:9200/,出现ES版本相关信息时,表示启动成功
在这里插入图片描述
下载kibana客户端,双击.bat文件,访问http://localhost:5601/
点击dev tools,就可以使用DSL语句测试各项功能
在这里插入图片描述

分词器的介绍

ik分词器

Elasticsearch默认使用的分词器是Standard Analyzer(标准分析器),标准分词器对英文分词比较友好,按空格划分英文单词,但是对于中文也是逐个字划分,因此并不适用于中文分词。查看默认的标准分词器的分词示例:

POST /_analyze
{
  "analyzer": "standard",
  "text": "hi how are you 查看展示"
}
分词结果
{
  "tokens" : [
    {
      "token" : "hi",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "how",
      "start_offset" : 3,
      "end_offset" : 6,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "are",
      "start_offset" : 7,
      "end_offset" : 10,
      "type" : "<ALPHANUM>",
      "position" : 2
    },
    {
      "token" : "you",
      "start_offset" : 11,
      "end_offset" : 14,
      "type" : "<ALPHANUM>",
      "position" : 3
    },
    {
      "token" : "查",
      "start_offset" : 15,
      "end_offset" : 16,
      "type" : "<IDEOGRAPHIC>",
      "position" : 4
    },
    {
      "token" : "看",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "<IDEOGRAPHIC>",
      "position" : 5
    },
    {
      "token" : "展",
      "start_offset" : 17,
      "end_offset" : 18,
      "type" : "<IDEOGRAPHIC>",
      "position" : 6
    },
    {
      "token" : "示",
      "start_offset" : 18,
      "end_offset" : 19,
      "type" : "<IDEOGRAPHIC>",
      "position" : 7
    }
  ]
}

相较于默认的标准分词器,ik分词器主要用于中文,它采用自然语言识别处理算法,根据词库和规则进行中文分词,会划分成比较合理的词语,那么如何安装ik分词器呢?
ik分词器的安装是以插件的形式安装,下载对应ES版本的ik分词器,解压后的文件夹在这里插入图片描述放到ES安装目录的plugins文件中在这里插入图片描述
重新启动ES后即可使用ik分词器,ik分词示例查看前后对比

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "hi how are you 查看展示"
}
{
  "tokens" : [
    {
      "token" : "hi",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "ENGLISH",
      "position" : 0
    },
    {
      "token" : "how",
      "start_offset" : 3,
      "end_offset" : 6,
      "type" : "ENGLISH",
      "position" : 1
    },
    {
      "token" : "you",
      "start_offset" : 11,
      "end_offset" : 14,
      "type" : "ENGLISH",
      "position" : 2
    },
    {
      "token" : "查看",
      "start_offset" : 15,
      "end_offset" : 17,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "展示",
      "start_offset" : 17,
      "end_offset" : 19,
      "type" : "CN_WORD",
      "position" : 4
    }
  ]
}

HanLP分词器

HanLP也是中文的一个分词器。它采用了深度学习等先进技术,分词粒度较细,能够将中文文本拆解成较为准确的词语。HanLP分词器的安装同样需要下载相同版本的源码
https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases
将下载的文件解压后,目录中的data拷贝到ES的data文件中,config中的文件拷贝到ES的Config文件夹下,并修改文件名为analysis-hanlp
将解压缩文件夹下除了data和config的文件拷贝到ES的plugins中新建文件夹下analysis-hanlp
修改config配置文件中hanlp.properties中root的值

在这里插入图片描述
另修改plugin-security.policy文件的内容为
在这里插入图片描述

重启ES进行测试

常用功能总结

创建索引与映射

示例:

PUT /indexdemo
{
  "mappings": {
    "properties": {
        "name":{
        "type":"text",
        "analyzer":"ik_smart"
      },
      "brand":{
        "type":"keyword"
      },
      "address":{
        "type":"text",
        "analyzer":"ik_smart"
      },
      "tel":{
        "type":"integer",
        "index":"false"
      },
      "price":"double"
    }
    
  }
}

文档操作

插入文档

POST /indexdemo/_doc/1
{
  "name":"烧烤",
  "brand":"淄博",
  "address":"山东烧烤",
  "tel":"1234324"
}

修改文档

局部修改文档中的信息

#修改文档
POST /indexdemo/_update/1
{
  "doc":{
     "tel":"12121212"
  }
}

全量修改文档的信息,删除原来文档信息后新增

PUT /indexdemo/_doc/1
{
  "name":"烧烤1",
  "brand":"淄博1",
  "address":"山东烧烤1",
  "tel":"1234324"  
}

查看、删除文档

#查看文档
GET /indexdemo/_doc/1
#删除文档
DELETE /indexdemo/_doc/1

查询

查看所有文档

#查看所有
GET /indexdemo/_search
{
  "query": {
    "match_all": {}
  }
}

全文检索

GET /indexdemo/_search
{
  "query": {
    "match": {
      "name": "涮"
    }
  }
}

精确查询

GET /indexdemo/_search
{
  "query": {
    "term": {
      "brand": {
        "value": "小店"
      }
    }
  }
}

在这里插入图片描述

范围查询

GET /indexdemo/_search
{
  "query": {
    "range": {
      "price": {
        "gte": "50",
        "lte":"100"
      }
    }
  }
}

在这里插入图片描述

复合查询 Boolean Query

GET /indexdemo/_search
{
  "query": {
    "bool": {
      "must": [
        {
        "match":{
            "name": "涮"
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "lte": 22
            }
          }
        }
      ], 
      "should":[
        {
          "term":{
            "brand":"小店"
          }
        }
      ],
      "filter": [
        {
          "match":{
            "address":"网红"
          }
        }
      ]
    }
  }
}

在这里插入图片描述

模糊查询

fuzziness:表示允许输入差异字符的个数
prefix_length:表示前几个字符需要是精确匹配的

GET /indexdemo/_search
{
  "query": {
    "fuzzy": {
      "name": {
        "value": "虾好吃",
        "fuzziness": 2,
        "prefix_length": 1
      }
    }
  }
}

分页

from :指数据开始得到偏移量,可有(页数-1)*每页展示数量获取
size: 每页获取的条数

#分页
GET /indexdemo/_search
{
  "query": {
    "match_all": {}
  },
  "from":0,
  "size":3
}

排序

价格升序

GET /indexdemo/_search
{
  "query": {
    "match_all": {}
  },
  "sort":[
    {
      "price": "asc"
    }
  ]
}

高亮

查询词结果高亮

#高亮
GET /indexdemo/_search
{
  "query": {
    "match": {
      "name":"涮"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述

扩展词

在ik分词器的配置文件中,可以设置扩展的词汇以及停用词

同义词

设置同义词能够增加搜索匹配的数据,通过自定义同义词分词器来实现

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "ik_smart",
          "filter": ["lowercase", "my_synonym"]
        }
      },
      "filter": {
        "my_synonym": {
          "type": "synonym",
          "synonyms_path": "H:/SoftWare/es/elasticsearch-7.10.1/elasticsearch-7.10.1/elasticsearch-7.10.1/config/synonyms.txt"
        }
      }
    }
  },
  "mappings": {
     "properties": {
      "name": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  }
}

设置同义词的文件
在这里插入图片描述

测试数据:

PUT /my_index/_doc/1
{
  "name":"开心"
}
PUT /my_index/_doc/2
{
  "name":"高兴"
}

GET /my_index/_search
{
  "query": {
    "match": {
      "name": "开心"
    }
  }
}

设置为同义词的数据,也能搜索到
在这里插入图片描述

词典扩展

随着时间的发展,新的词汇在增加,扩展词汇的设置就是为了能够提升新增词汇的识别,从而能够更贴切的划分语句
在添加之前,奥利给的分词展示
在这里插入图片描述
添加扩展词配置之后
在这里插入图片描述
在这里插入图片描述
会被当成一个词语
在这里插入图片描述

停用词设置

一些无实际意义的词语,例如:啊、哈、呵,这些词汇不需要分词,将这些词汇设置在停用词文件中,分词后不会显示即不会划分成词
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ElasticSearch是一个开源的搜索和分析引擎,用于全文搜索、结构化搜索和分析,可用于各种应用程序,包括电子商务、日志分析、安全策略等。 本教程将介绍如何使用ElasticSearch进行搜索、索引和分析数据。 1. 安装ElasticSearch 首先需要安装ElasticSearch。这可以通过官方网站的下载页面下载最新版本的ElasticSearch。下载后,解压缩文件并启动ElasticSearch。在Windows上,可以运行bin/elasticsearch.bat文件;在Linux上,可以运行bin/elasticsearch脚本。 2. 创建索引 在ElasticSearch中,数据存储在索引中,类似于数据库中的表。要创建一个索引,可以使用ElasticSearch的REST API。例如,要创建一个名为“myindex”的索引,可以使用以下命令: ``` PUT /myindex ``` 这将创建一个名为“myindex”的索引。 3. 添加文档 在ElasticSearch中,文档是存储在索引中的最小数据单元。要向索引添加文档,可以使用以下命令: ``` POST /myindex/_doc { "title": "ElasticSearch Tutorial", "author": "John Doe", "content": "This is a tutorial on how to use ElasticSearch." } ``` 这将向“myindex”索引添加一个文档,其中包含标题、作者和内容字段。 4. 搜索文档 要搜索文档,可以使用ElasticSearch的搜索API。例如,要从“myindex”索引中搜索包含“ElasticSearch”的文档,可以使用以下命令: ``` GET /myindex/_search?q=ElasticSearch ``` 这将返回所有包含“ElasticSearch”的文档。 5. 聚合数据 ElasticSearch还提供了聚合功能,可以用于从数据中提取有用的信息。例如,要计算“myindex”索引中所有文档的平均长度,可以使用以下命令: ``` GET /myindex/_search { "aggs": { "avg_length": { "avg": { "field": "content.length" } } } } ``` 这将返回所有文档内容长度的平均值。 6. 过滤数据 ElasticSearch的过滤功能可以用于从数据中过滤出特定的文档。例如,要从“myindex”索引中过滤出作者为“John Doe”的文档,可以使用以下命令: ``` GET /myindex/_search { "query": { "bool": { "must": [ { "match": { "author": "John Doe" } } ] } } } ``` 这将返回所有作者为“John Doe”的文档。 7. 总结 ElasticSearch是一个强大的搜索和分析引擎,可用于各种应用程序。使用ElasticSearch的REST API,可以轻松创建索引、添加文档、搜索文档、聚合数据和过滤数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值