解析-analysis
解析-analysis
1. 解析-analysis
可以理解为分词。
解析由解析器——analyzer执行,解析器包括内置和用户自定义两种。
1.1. 解析器
1.1.1. 内置解析器
doc:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html
Standard Analyzer:按单词边界分解,忽略大多数标点符号、小写术语,支持删除停用词。
Simple Analyzer:以非字母字符为分词点,格式化字母为小写。
Whitespace Analyzer:以空白字符为分词点,不执行小写化。
Stop Analyzer:类似于simple analyzer,但支持删除停用词。
Pattern Analyzer:正则解析分词
Language Analyzers:其它语种分词
Fingerprint Analyzer:
The fingerprint analyzer is a specialist analyzer which creates a fingerprint which can be used for duplicate detection.
1.1.2. 自定义解析器
暂不涉及。
1.2. 索引分词/搜索分词
索引分词很好理解,写时分词,形成索引。
每个text字段可以指定独有的analyzer;
如果没有指定,默认以index settings/default参数为准,实质上是standard analyzer.
搜索分词
对于搜索语句,也会进行分词,默认使用索引分词的解析器;
可以单独设置搜索分词的分词器,但一般不必。
1.2.1. 分词示例
以内置english解析器为例:
"The QUICK brown foxes jumped over the lazy dog!"
首先小写化,移除频次高的停用词,转换单词为原型词,最终的结果是序列:
[ quick, brown, fox, jump, over, lazi, dog ]
2. 案例
环境配置:
创建index test_i
创建field msg,使用默认配置,即标准分词器
创建field msg_english,使用english分词器;
# 测试环境创建
d = {"msg":"Eating an apple a day keeps doctor away."}
rv = es.index("test_i", d)
pr(rv)
d = { "properties": {
"msg_english": {
"type": "text",
"analyzer": "english"
} } }
rv = es.indices.put_mapping(body=d, index=["test_i"]) # 正常情况返回true
# 查看数据结构
rv = es.indices.get_mapping(index_name)
{
"test_i": {
"mappings": {
"properties": {
"msg": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
} } },
"msg_english": {
"type": "text",
"analyzer": "english"
} } } }}
插入文档:
d = {"msg_english":"Eating an apple a day keeps doctor away."}
rv = es.index("test_i", d)
查询:查询分为两部分,第一种按字段msg匹配eat,是没有hits项的,查询msg_english字段
# search apis
def search_api_test():
data = { "query" : { "match" : {"msg_english":"eat"} }, }
rv = es.search(index="test_i", body=data)
pr(rv)
search_api_test()
结果
{ "took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "test_i",
"_type": "_doc",
"_id": "XG7KFG0BpAsDZnvvGLz2",
"_score": 0.2876821,
"_source": {
"msg_english": "Eating an apple a day keeps doctor away."
} } ] }}
补充:分词测试,直观测试标准分词器和english分词器的区别
测试代码:
# 分词测试
d1 = {"analyzer":"standard","text":"Eating an apple a day keeps doctor away."}
d2 = {"analyzer":"english","text":"Eating an apple a day keeps doctor away."}
rv1 = es.indices.analyze(body=d1, format="text")
rv2 = es.indices.analyze(body=d2, format="text")
print([x["token"] for x in rv1["tokens"]]) # d1 分词结果
print([x["token"] for x in rv2["tokens"]]) # d2 分词结果
输出:
['eating', 'an', 'apple', 'a', 'day', 'keeps', 'doctor', 'away']
['eat', 'appl', 'dai', 'keep', 'doctor', 'awai']
解析-analysis的更多相关文章
- [Elasticsearch] 全文搜索 (一) 基础概念和match查询
全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面 ...
- Makefile浅尝
[0]README makefile定义: 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要一先编译,哪些文件需要后编译,哪 ...
- JVM系列-类加载机制
简介 在java中,类的声明周期总共分为以下几种: 加载(Loading),验证(Verification),准备(Preparation),解析(Analysis), 初始化(Initializat ...
- CET4词汇
abandon vt.丢弃:放弃,抛弃 ability n.能力:能耐,本领 abnormal a.不正常的:变态的 aboard ad.在船(车)上:上船 abroad ad.(在)国外:到处 ab ...
- Spark SQL源码解析(三)Analysis阶段分析
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Analysis阶段概述 首先 ...
- 1Z0-053 争议题目解析46
1Z0-053 争议题目解析46 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 46.What happens when you run the SQL Tuning Adviso ...
- CocosStudio文件解析工具CsdAnalysis
起因 因为工作需要,所以需要使用CocosStudio来制作界面动画什么的.做完了发现需要找里边对象的时候会有很长一串代码,感觉不是很爽.之前写OC代码的时候可以吧程序中的对象指针跟编辑器中的对象相对 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q131-Q134)
Question 131 You are designing multiple SharePoint 2010 features. You have the following requiremen ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q102-Q104)
Question 102 You are designing a Windows application that accesses information stored on a ShareP ...
随机推荐
- selenium grid的使用
Selenium grid是用来分布式执行测试用例脚本的工具,比如测试人员经常要测试多浏览器的兼容性,那就可以用到grid了. selenium grid的hub相当于一个接收脚本并分发脚本的角色,n ...
- 关于Dev-C++的安装以及基本使用方法
我觉得Dev-C++是一款小巧方便的编译器,就给那些刚刚学习编程的同学讲一下这个软件的安装和基本的编译以及一些使用的技巧. (完全是傻瓜式的截图和教程,内容过于冗余,主要是考虑到这些新生没有接触过编程 ...
- 搭建FEBS权限系统
在码云看到一个FEBS权限系统,但是没有找到搭建手册,自己记录一下. 1.下载项目:https://github.com/wuyouzhuguli/FEBS-Shiro2.创建数据库:执行sql文件夹 ...
- 【转载】Java的JDBC事务详解
转自:http://www.cnblogs.com/azhqiang/p/4044127.html 事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单 ...
- Python求1000以内所有3或5的倍数的和。
a=0 for n in range(1,1000): if n%3==0 or n%5==0: a=a+n print(a) 运行结果: 233168
- Diskpart手动创建EFI、MSR引导分区
当给电脑加新硬盘时候,并且需要把新硬盘当作系统盘,有几种方法来为新硬盘创建引导分区: 可以选择用U盘刻录微软原版系统镜像,直接从U盘启动,然后直接创建分区,直接装,会自动为硬盘创建好几个引导分区. 进 ...
- win7的mstsc无法远程的解决方法
第一,开启远程功能,计算机上右击-属性,如下图. 第二,打开服务,开启这个,如下图 第三,为要远程的计算机设置账号和密码, 第四,mstsc时,可以设置记住密码,这样简单.
- 关于使用阿里云MAVEN镜像仓库
由于国内的某些不可明确的原因 国内连接google的时候十分慢,使得看github上的项目十分慢,这里我们可以修改build.gradle下的文件来使用阿里云仓库同步 会更快: // Top-leve ...
- nginx配置访问密码,输入用户名和密码才能访问
1. 安装 htpasswd 工具 yum install httpd-tools -y 设置用户名和密码,并把用户名.密码保存到指定文件中: [sandu@bogon conf]$ sudo mkd ...
- 每天进步一点点------CORDIC (一)
三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来计算任意角度的三角函数的值.这种表格在人们刚刚产生三角函数的概念的时候就已经有了,它们通常 ...