在互联网上,随处可见的搜索框。背后所用的技术大多数就是全文检索。
在全文检索领域,常见的库/组件有:lucene、solr、sphinx、elasticsearch等。

简单对比几种全文引擎的区别

  • lucene是一个基于java开发的全文检索基础包,使用起来繁杂,且默认不支持分布式检索
  • solr是基于lucene开发的一个搜索工具。抽象度更高,使用更简单,且提供一个控制面板。
  • elasticsearch也是基于lucene开发的。同样是高度抽象,并提供了一个非常强大的dsl检索功能,可以很方便的检索出数据。
  • solr和es的区别主要在于:es有强大的实时检索能力而不怎么掉速,solr创建索引的同时,检索速度会下降。如果不考虑实时检索,solr的速度更快。solr社区更成熟。es使用更方便更现代化。
  • sphinx是俄罗斯人开发的一个全文检索引擎,使用c++开发。性能比java开发的es和solr高,但是在社区繁荣度上,比es和solr差很多。比如中文分词器,sphinx的coreseek插件已经停更了。sphinx有个非常好的地方就是可以作为mysql插件使用。

环境搭建

随着容器化的发展,我们大部分环境都切换到docker上了。本篇博文的环境通过docker搭建。

es在docker中搭建

我使用的是es7.4.2

我这里把docker中的es数据目录和插件目录映射到本机,方便操作。实际线上部署也应该映射数据目录到宿主机,防止数据丢失。

搭建kibana可视化环境

运行成功后,在docker控制面板上,就可以看到两个正在运行的容器了。

在本机浏览器访问 http://localhost:5601/ 即可打开kibana仪表盘。

elasticsearch基本概念

用数据库的概念来对比es的概念

数据库 elasticsearch
database 库 index 索引
table 表 type 类型 7.x已经废除
row 行 document 文档
column 列 field 字段
chema 表结构 mapping 映射
sql dsl
select get
update put
delete delete

上手elasticsearch的dsl

es有两种方式操作:1.url方式,2.http请求中的body提交json dsl

创建一个索引

删除一个索引

创建mapping

在es7中已经不支持映射mapping的时候,指定_doc名称了。es会给一个默认的_doc名称

新增字段

在es中只能新增字段,无法修改已有字段。如果需要需改已有字段,只能重新创建索引,然后使用reindex迁移数据到新的索引。

查看索引

插入以及数据

多次put同一个id到es,那就是更新了

使用post请求,在_doc的type中插入id为1的一条数据。id可以自定义格式,可以为数字以及自定义字符串

查看数据

数据检索的格式为 get /索引名称/_search + json格式的body

基本搜索

范围搜索

分页搜索

排序

复杂搜索

在es搜索中,一般会存在多个条件,类似于sql的and or等操作。在es中使用bool操作来连接多个条件,must 必须满足,should:满足最好,不满足也没关系(如果满足,es的搜索评分会更高,结果更靠前)

聚合

在es中,聚合使用eggs来操作。可快速求出最大、平均、等值。

配置中文分词器

es默认的分词器是中文分词是按单个汉字分割。所以使用起来搜索结果不太准确。在es的分词插件中,中文分词用的比较多的是ik分词器

github地址:

下载好es对应版本的插件,解压出来,放到es的插件目录。重启es,即可启用插件。

我们对比一下使用es默认分词器和ik分词器的结果

默认分词器

使用ik分词器

ik分词器支持两种分词模式 1. ik_smart 2.ik_max_word

ik_smart模式

ik_max_word

两种分词模式的区别在于分词粒度的粗细问题。而standard分词直接按单个字符分割。

使用.net core的nest客户端

es的.net客户端分为两个,一个是elasticsearch.net一个是nest,nest是高级的客户端库,提供更符合.net程序员的操作api。elasticsearch.net更适合喜欢写dsl的程序员。一般我们都使用nest。

创建索引

插入数据

检索数据

检索数据的写法基本上和dsl语法结构一致。学会dsl,用c#也可以写出正确的查询语句。

学会以上的基本操作,就可以算是对es有一个基本的了解了。更多深入的知识点可以去es官方文档学习。

nest库地址:

官方文档:

到此这篇关于时间轻松学会.net core操作elasticsearch7的方法的文章就介绍到这了,更多相关.net core操作elasticsearch 7内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!