个人博客

记录工作中的点点滴滴


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

Elasticsearch:Smart Chinese Analysis plugin

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 961 字 | 阅读时长 ≈ 4 分钟

Smart Chinese Analysis插件将Lucene的Smart Chinese分析模块集成到Elasticsearch中,用于分析中文或中英文混合文本。 支持的分析器在大型训练语料库上使用基于隐马尔可夫(Markov)模型的概率知识来查找简体中文文本的最佳分词。 它使用的策略是首先将输入文本分解为句子,然后对句子进行切分以获得单词。 该插件提供了一个称为smartcn分析器的分析器,以及一个称为smartcn_tokenizer的标记器。 请注意,两者均不能使用任何参数进行配置。

要将smartcn Analysis插件安装在Elasticsearch Docker容器中,请使用以下屏幕截图中显示的命令。 然后,我们重新启动容器以使插件生效:

1
./bin/elasticsearch-plugin install analysis-smartcn

在Elasticsearch的安装目录运行上面的命令。显示的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ./bin/elasticsearch-plugin install analysis-smartcn
-> Downloading analysis-smartcn from elastic
[=================================================] 100%
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.bouncycastle.jcajce.provider.drbg.DRBG (file:/Users/liuxg/elastic/elasticsearch-7.3.0/lib/tools/plugin-cli/bcprov-jdk15on-1.61.jar) to constructor sun.security.provider.Sun()
WARNING: Please consider reporting this to the maintainers of org.bouncycastle.jcajce.provider.drbg.DRBG
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
-> Installed analysis-smartcn
(base) localhost:elasticsearch-7.3.0 liuxg$ ./bin/elasticsearch-plugin list
analysis-icu
analysis-ik
analysis-smartcn
pinyin

上面显示我们已经成功地把analysis-smartcn安装成功了。针对docker的安装,我们可以通过如下的命令来进入到docker里,再进行安装:

1
2
3
4
5
$ docker exec -it es01 /bin/bash
[root@ec4d19f59a7d elasticsearch]# ls
LICENSE.txt README.textile config jdk logs plugins
NOTICE.txt bin data lib modules
[root@ec4d19f59a7d elasticsearch]#

在这里es01是docker中的Elasticsearch实例。具体安装请参阅我的文章“Elastic:用Docker部署Elastic栈”。

注意:在我们安装好smartcn分析器后,我们必须重新启动Elasticsearch使它开始起作用。

阅读全文 »

Elasticsearch:significant terms aggregation

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 2.7k 字 | 阅读时长 ≈ 12 分钟

在本文中,我们将重点关注significant terms和significant text聚合。这些聚合旨在搜索数据集中有趣和/或不寻常的术语,这些术语可以告诉您有关数据的隐藏属性的更多信息。此功能对于以下用例特别有用:

  • 为用户查询标识包含同义词,首字母缩略词等的相关文档。例如,当用户搜索H1N1时,重要术语聚合可能会建议带有“bird flu”的文档。
  • 识别数据中的异常和有趣的事件。例如,通过基于位置过滤文档,我们可以确定特定区域中最常见的犯罪类型。
  • 使用对整数字段(例如身高,体重,收入等)的significant term聚合来确定一组主题的最重要属性。

应当注意,重要术语和重要文本聚合都对直接查询(前景集)和索引中所有其他文档(背景集)检索的文档执行复杂的统计计算。因此,两种聚合都需要大量计算,因此应正确配置以快速工作。但是,一旦在本教程的帮助下掌握了它们,您将获得一个强大的工具,可以在应用程序中构建非常有用的功能并从数据集中获取有用的见解。让我们开始吧!

在教程开始,我们假定您已经把Elasticsearch及Kibana完整地安装好了。

创建Index mapping

为了说明significant terms和significant text的工作方式,我们首先需要创建一个测试“news”索引来存储新闻文章的集合。 索引映射将包含诸如作者,出版日期,文章标题,视图数和主题之类的字段。 让我们创建映射:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PUT news
{
"mappings": {
"properties": {
"published": {
"type": "date",
"format": "dateOptionalTime"
},
"author": {
"type": "keyword"
},
"title": {
"type": "text"
},
"topic": {
"type": "keyword"
},
"views": {
"type": "integer"
}
}
}
}

如您所见,我们在topic和author字段中使用了keyword数据类型,在title字段中使用了text数据类型。 提醒您,关键字字段只能按其确切值进行搜索,而文本字段可用于全文搜索。

阅读全文 »

Elasticsearch:search template

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 2k 字 | 阅读时长 ≈ 10 分钟

我们发现一些用户经常编写了一些非常冗长和复杂的查询 - 在很多情况下,相同的查询会一遍又一遍地执行,但是会有一些不同的值作为参数来查询。在这种情况下,我们觉得使用一个search template(搜索模板)来做这样的工作非常合适。搜索模板允许您使用可在执行时定义的参数定义查询。

Search template的好处是:

  • 避免在多个地方重复代码
  • 更容易测试和执行您的查询
  • 在应用程序间共享查询
  • 允许用户只执行一些预定义的查询
  • 将搜索逻辑与应用程序逻辑分离

定义一个Search template

首先,我们来定义一个search template来看看它到底是什么东西。使用_scripts端点将模板存储在集群状态中。在search template中使用的语言叫做mustache。(http://mustache.github.io/mustache.5.html)

1
2
3
4
5
6
7
8
9
10
11
12
13
POST _scripts/my_search_template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"{{my_field}}": "{{my_value}}"
}
}
}
}
}

在这里,我们定义了一个叫做my_search_template的search template。如果我们想更新这个search template,我们可以直接进行修改,然后再次运行上面的命令即可。

阅读全文 »

Elasticsearch:Pinyin 分词器

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 1.5k 字 | 阅读时长 ≈ 7 分钟

Elastic的Medcl提供了一种搜索Pinyin搜索的方法。拼音搜索在很多的应用场景中都有被用到。比如在百度搜索中,我们使用拼音就可以出现汉字:

对于我们中国人来说,拼音搜索也是非常直接的。那么在Elasticsearch中我们该如何使用pinyin来进行搜索呢?答案是我们采用Medcl所创建的elasticsearch-analysis-pinyin分析器。下面我们简单介绍一下如何进行安装和测试。

下载Pinyin分析器源码进行编译及安装

由于elasticsearch-analysis-pinyin目前没有可以下载的可以安装的发布文件,我们必须自己下载源码,并编译。首先,我们可以通过如下的命名来进行下载:

1
$ git clone https://github.com/medcl/elasticsearch-analysis-pinyin

下载源码后,进入到项目的根目录。整个项目的源码显示为:

1
2
3
4
5
6
7
8
9
10
$ tree -L 2
.
├── LICENSE.txt
├── README.md
├── lib
│ └── nlp-lang-1.7.jar
├── pom.xml
└── src
├── main
└── test

这样在我们的电脑里就会发现下载好的elasticsearch-analysis-pinyin源码。在进行编译之前,我们必须修改一下我们的版本号以便和我们的Elasticsearch的版本号是一致的。否则我们的plugin将不会被正确装载。我们已知我们的Elasticsearch版本号码是7.3.0,那么我们修改我们的pom.xml文件:

阅读全文 »

Elasticsearch:Java 运用示例

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 2.8k 字 | 阅读时长 ≈ 13 分钟

在今天的文章中,我们来介绍如何使用Java来访问Elasticsearch。

首先,我们必须在我们的系统中安装Elasticsearch。

Maven 配置

针对Java的开发,我们必须在pom.xml中配置相应的Elasticsearch的信息。Mavev dependency定义如下:

1
2
3
4
5
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.3.1</version>
</dependency>

这也是目前截止最新的Elasticsearch的版本。您可以随时使用之前提供的链接查看Maven Central托管的最新版本。

阅读全文 »
1…111213…29
永夜初晗凝碧天

永夜初晗凝碧天

Linux,Python,MySQL,ELK Stack,K8S,Docker

141 日志
55 分类
60 标签
RSS
QQ E-Mail
友情链接
  • 博客园
  • 百度
近期文章
  • Elasticsearch IK 分词器
  • 为Elasticsearch启动https访问
  • FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置
  • Elasticsearch:使用_update_by_query更新文档
  • Solutions:安全的APM服务器访问
© 2019 — 2020 永夜初晗凝碧天
博客全站字数统计 : 412.1k 字 ||载入天数...载入时分秒...
本文总阅读量次 || 本站访客数人次 || 本站总访问量次