elasticsearch

elasticsearch,第1张

首先准备环境

ElasticSearch : https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D

logstash : https://mirrors.huaweicloud.com/logstash/?C=N&O=D

kibana : https://mirrors.huaweicloud.com/kibana/?C=N&O=D

ik : https://github.com/medcl/elasticsearch-analysis-ik/tree/v7.8.0

ElasticSearch 是一个实时分布式搜索和分析引擎,主要用于全文搜索,结构化搜索,分析以及将这三者混合使用。

Lucene 是一个全文检索引擎的架构。

ElasticSearch vs Solr 总结

(1)es基本是开箱即用,非常简单。Solr安装略微复杂一丢丢,可关注( solr6.6教程-基础环境搭建(一) )

(2)Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。

(3)Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。

(4)Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑

(5)Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;

ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。

Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

(6)Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。

ik分词器:

ik提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细粒度切分。

ik_smart:

ik_max_word:

ik分词器可以增加自己的配置,自己配置词典。

Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词。例如:

我们会得到这样的结果:

[html] view plain copy

{

tokens: [

{

token: text

start_offset: 2

end_offset: 6

type: <ALPHANUM>

position: 1

}

{

token: 我

start_offset: 9

end_offset: 10

type: <IDEOGRAPHIC>

position: 2

}

{

token: 是

start_offset: 10

end_offset: 11

type: <IDEOGRAPHIC>

position: 3

}

{

token: 中

start_offset: 11

end_offset: 12

type: <IDEOGRAPHIC>

position: 4

}

{

token: 国

start_offset: 12

end_offset: 13

type: <IDEOGRAPHIC>

position: 5

}

{

token: 人

start_offset: 13

end_offset: 14

Elasticsearch 中文搜索时遇到几个问题:

接下来从以下几点讲一下怎么ES中文分词

索引时,为了提供索引的覆盖范围,通常会采用ik_max_word分析器,会以最细粒度分词索引,搜索时为了提高搜索准确度,会采用ik_smart分析器,会以粗粒度分词

字段mapping设置如下:

analysis索引分析模块充当analyzer分析器的可配置注册表,通过analyzer对文档索引阶段的字段和搜索String进行处理,自定义analyzer时,通常需要character filter tokenizer token filters来完成

首先字符串经过过滤器(character filter),他们的工作是在分词前处理字符串。字符过滤器能够去除HTML标记,例如把“<a>”变成“a

英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词

最后,每个词都通过所有表征过滤(token filters),他可以修改词(例如将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“a”、“and”、“the”等等)或者增加词(例如同义词像“jump”和“leap”)。

character filter-->>tokenizer-->>token filters

官网example:

通常为了保证索引时覆盖度和搜索时准确度,索引分词器采用ik_max_word,搜索分析器采用ik_smart模式

因为倒排索引中的数据是索引时由分词器来处理的,如果分词器有变化,那么搜索时query关键词即使和doc中关键词相同,但是因为分词器的原因,分出来的词会出现不匹配的情况,因此当mapping或者分词器字典同义词词典等发生变化时,需要reindex索引数据

2.1 建议同义词词典

自定义添加同义词通过ik分词器

想查看同义词效果或者测试分词效果

suggest词需要对拼音前缀,全拼,中文进行前缀匹配,例如:“百度”一词,键入"baidu","bd","百"都必须匹配到,因此在索引的时候需要一词分多个分词器来索引保存,中文采用单字分词,拼音首字母和全拼需要自定义analyzer来索引。

部分内容有待完善


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11629086.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存