elasticsearch笔记_字段(名词)类型_分析过程(三)
来源:互联网 发布:php页面输出乱码 编辑:程序博客网 时间:2024/06/11 20:38
映射
1.映射
索引(名词)中每个文档都有自己的类型,每种类型都有自己的映射.映射定义了类型中的域:映射定义了每种类型的域,以及域的类型,以及elasticsearch如何处理这些域.
elasticsearch里面常用的域的类型如下:
- 字符串: string.
- 整数 : byte, short, integer, long.
- 浮点数: float, double.
- 布尔型: boolean.
- 日期: date.
查看映射的命令 : GET /索引名称/_mapping/索引类型.
2.string(字符串)的自定义映射
string类型默认是全文类型的数据,也就是说,它的值在索引(动词)前会经过一次分析器,在被搜索时也要经过一次分析器(分析器的解释在下面).
string 域映射的最重要的两个属性index和analyzer.
index : 可以定义怎样控制字符串.包括:
- analyzed : 用分析器(以全文形式搜索).
- not_analyzed : 不用分析器(以精确形式搜索).
- no : 本域不可被搜索.
analyzer : 对于analyzed的域指定分析器.(elasticsearch默认指定standard分析器,可以替换为whitespace 、 simple 或者english).
注意
- elasticsearch允许增加一个映射(可以是已经存在的),但是不可以修改一个已经存在的映射,如果想要修改,只能通过先删除,再添加.
- 尤其不能将一个存在的域从 analyzed 改为 not_analyzed
- 原因 : 如果一个域的映射已经存在,那么该域的数据可能已经被索引。如果你意图修改这个域的映射,索引的数据可能会出错,不能被正常的搜索。
3.复杂核心类型的域
- 多值域 : 一个域里面有好几个值.例如:{ “tag”: [ “search”, “nosql” ]}这样的域以数组的形式处理标签,数组中所有的值必须是同一类型的.从elasticsearch里面获取的_source域是按照添加的顺序被显示,但是索引(动词)的时候是无序的.
lucene实际上对于数组的存储是:
{ "followers": [ { "age": 35, "name": "Mary White"}, { "age": 26, "name": "Alex Jones"}, { "age": 19, "name": "Lisa Smith"} ]}存储结果如下:{ "followers.age": [19, 26, 35], "followers.name": [alex, jones, lisa, smith, mary, white]}
空域(null):其实Lucene是不会存储null值的,只不过将以下三种形式不会被索引(动词).
“null_value”: null,
“empty_array”: [],
“array_with_null_value”: [ null ]多层级对象:对象里面套着对象.
{ "tweet": "Elasticsearch is very flexible", "user": { "id": "@johnsmith", "gender": "male", "age": 26, "name": { "full": "John Smith", "first": "John", "last": "Smith" } }}Lucene内部的存储结果如下:{ "tweet": [elasticsearch, flexible, very], "user.id": [@johnsmith], "user.gender": [male], "user.age": [26], "user.name.full": [john, smith], "user.name.first": [john], "user.name.last": [smith]}
分析
elasticsearch中的数据分为两类 : “精确值”和”全文”.
1.精确值 :
精确值是指一些精确的数据,通常是用来精确的完全匹配的数据.例如:人的名称,性别,手机号码等几乎唯一的数据.
2.全文
全文是指文本数据,通常是指非结构化数据,或者人类很容易辨识的语言书写而计算机却无法准确解析的数据.例如:邮件的内容,一篇文章的内容等.
3.倒排索引
将文档的content拆分成单个的词条,创建一个包含所有不重复词条的列表,然后列出每个词条出现在那个文档.例如(来自elasticsearch官网):
假设现在有两个文档:
1.The quick brown fox jumped over the lazy dog
2.Quick brown foxes leap over lazy dogs in summer倒排索引的结果如下:
term doc1 doc2 Quick X The X brown X X dog X dogs X fox X foxes X in X jumped X lazy X X leap X over X X quick X summer X the X
现在如果我们想要搜索quick brown,结果如下:
term doc1 doc2 brown X X quick X根据结果可以认为quick brown与两个结果都匹配,但是明显与doc1的匹配度更高,就相关性而言,doc1比doc2更好.
- 但是我们更希望:
- Quick 可以小写化为 quick 。
- foxes 可以 词干提取 –变为词根的格式– 为 fox 。类似的, dogs 可以为提取为 dog 。
- jumped 和 leap 是同义词,可以索引为相同的单词 jump 。
4.分析
就是将文档拆分成词条然后进行标准化统一.这个过程主要由分析器来实现.
5.分析器
分析器包括:
- 字符过滤器 : 过滤掉无用词.例如:&变成and.
- 分词器 : 遇到空格或者标点,将文本拆成词条.
- 词条过滤器(token过滤器) : 过滤无用词,添加同义词.例如:去掉and,the,&等.或者添加像 jump 和 leap 这种同义词,
elasticsearch里面内置了很多分析器:
注意
查询”全文”类型的数据时会用到分析器,”精确”类型的数据不会用到分析器去分析字符串,而是查询你指定的精确值.
- elasticsearch笔记_字段(名词)类型_分析过程(三)
- ALSA声卡07_分析调用过程_学习笔记
- 深入分析java web 技术内幕_笔记_三
- elasticsearch笔记_基本概念(一)
- elasticsearch笔记_基本概念(一)
- Spring _ AOP名词
- 英语语法基础_名词
- elasticsearch笔记_近似匹配_部分匹配(七)
- elasticsearch笔记_全文搜索_query(五)
- elasticsearch笔记_多字段搜索(六)
- elasticsearch笔记_相关度控制(八)
- java学习笔记_类建立对象初始化过程分析
- 黑马程序员_笔记三
- 逻辑英语_名词从句
- 软件模型分析_笔记
- 01_什么是Elasticsearch
- elasticsearch-mapping字段类型
- Elasticsearch - 理解字段分析过程(_analyze与_explain)
- WPF应用
- iOS面试笔记(1)
- 【CSS】float属性详解
- Javascript基础知识(一)
- 尚硅谷_JavaScript_学习笔记
- elasticsearch笔记_字段(名词)类型_分析过程(三)
- LeetCode 242. Valid Anagram (map使用)
- Properties
- 推荐系统-推荐冷启动问题
- 关于八进制改十进制程序的修改
- java中的equals( )和hashcode( )
- 手游客户端开发招聘要求
- 常用排序算法之冒泡排序
- applicationContext的xml配置文件异常:找不到beans的声明文件