【入門】ElasticSearch的意思是在中文中使用最基礎或最初階的方式來介紹ElasticSearch

*此文章是根据2021年9月24日(星期五)在公司内举行的Another works LT会议的幻灯片所编写的。

thumbnail

我们在我们的复合云服务中引入了ElastciSearch作为全文搜索引擎。由于我对此了解不多,因此我将这些知识整理在了本文中!

ElasticSearch是什么?

image.png

与关系型数据库(RDB)相比较

当有句子中提到鲛鱼是螺旋蛳的弟弟时,我们考虑在关系数据库中进行搜索。搜索将使用以下SQL语句进行前向匹配和后向匹配。

SELECT text FROM テーブル名 WHERE text LIKE '%検索文字列%'

就会出现以下情况,本来不想出现的“カツ”会被搜索命中。
而想要命中的“鰹”却无法被搜索到,这样缺乏搜索的灵活性。

■搜索字符串
鲣鱼 -> 能找到
蛤蜊 -> 能找到
猪排 -> 能找到(不想让它找到)
鰹鱼 -> 找不到(想让它找到)

image.png

为了实现灵活的搜索,在ElasticSearch中,将文本按意义划分为有意义的单词,并保存到文档中(相当于关系型数据库中的记录)。
然而,在日语情况下,将文本按有意义的单词进行划分是困难的。
而在英语情况下,文本通常用半角空格等进行了一定程度的分割。

因此,词法分析和N-gram成为了解决该问题的方法。

词素分析

自然语言中的字词通过事先注册的词典进行分割,以及确定其品词等的方法。
例如:kuromoji、sudachi。

image.png

Ngram (一种用于统计语言中词组或短语的频率和分布的工具)

image.png

要提高搜索准确性

我认为可以尝试将少有搜索噪音和高有搜索遗漏的形態素解析和少有搜索噪音和少有搜索遗漏的Ngram结合在一起进行文档的注册。
或者简单地考虑提高形態素解析词典的准确性的方法。

image.png

我们在Another works正在寻找能够一起工作的伙伴。

广告
将在 10 秒后关闭
bannerAds