Elasticsearch系统学习(十一)-mapping

一、知识铺垫

1.1、搜索结果各项含义

GET /_search

{
  "took": 6,   #整个搜索请求花费了多少毫秒
  "timed_out": false,  #是否超时,可以手动指定超时时间
  "_shards": {    #默认一个搜索请求,会打到index的所有primary shard上去,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard的其中一个replica shard上去。
    "total": 6,
    "successful": 6,  #shards fail的条件(primary和replica全部挂掉)
    "failed": 0
  },
  "hits": {
    "total": 10,   #本次搜索,返回了几条结果
    "max_score": 1,   #本次搜索的所有结果中,最大的相关度分数是多少,每一条document对于search的相关度,越相关,_score分数越大,排位越靠前
    "hits": [   #默认查询前10条数据,完整数据,_score降序排序
      {
        "_index": ".kibana",
        "_type": "config",
        "_id": "5.2.0",
        "_score": 1,
        "_source": {
          "buildNum": 14695
        }
      }
    ]
  }
}

对于timeout:可以手动指定超时时间,如timeout=10ms,timeout=1s,timeout=1m ==>GET /_search?timeout=10m

1.2、multi-index和multi-type搜索模式

/_search:    所有索引,所有type下的所有数据都搜索出来
/index1/_search:    指定一个index,搜索其下所有type的数据
/index1,index2/_search:    同时搜索两个index下的数据
/*1,*2/_search:     按照通配符去匹配多个索引
/index1/type1/_search:    搜索一个index下指定的type的数据
/index1/type1,type2/_search:    可以搜索一个index下多个type的数据
/index1,index2/type1,type2/_search:    搜索多个index下的多个type的数据
/_all/type1,type2/_search:_all,   可以代表搜索所有index下的指定type的数据

1.3、分页搜索

GET /_search?size=10
GET /_search?size=10&from=0
GET /_search?size=10&from=20
GET /test_index/test_type/_search?from=0&size=3

1.4、query string基础语法及_all metadata的原理和作用

1.4.1、query string基础语法

GET /test_index/test_type/_search?q=test_field:test    #表示test_field字段包含test的document
GET /test_index/test_type/_search?q=+test_field:test   #"+"表示test_field字段包含test的document
GET /test_index/test_type/_search?q=-test_field:test   #"-"表示test_field字段不包含test的document

1.4.2、_all metadata的原理和作用

GET /test_index/test_type/_search?q=test

直接可以搜索所有的field,任意一个field包含指定的关键字就可以搜索出来。

es会自动将多个field的值,全部用字符串的方式串联起来,变成一个长的字符串,作为_all field的值,同时建立索引

后面如果在搜索的时候,没有对某个field指定搜索,就默认搜索_all field

#例如
{
  "name": "jack",
  "age": 26,
  "email": "[email protected]",
  "address": "guamgzhou"
}

"jack 26 [email protected] guangzhou",作为这一条document的_all field的值,同时进行分词后建立对应的倒排索引

二、mapping

2.1、mapping的引入

插入几条数据,让es自动为我们建立一个索引

PUT /website/article/1
{
  "post_date": "2017-01-01",
  "title": "my first article",
  "content": "this is my first article in this website",
  "author_id": 11400
}

PUT /website/article/2
{
  "post_date": "2017-01-02",
  "title": "my second article",
  "content": "this is my second article in this website",
  "author_id": 11400
}

PUT /website/article/3
{
  "post_date": "2017-01-03",
  "title": "my third article",
  "content": "this is my third article in this website",
  "author_id": 11400
}

尝试各种搜索:

GET /website/article/_search?q=2017			       #3条结果
GET /website/article/_search?q=2017-01-01        	       #3条结果
GET /website/article/_search?q=post_date:2017-01-01   	#1条结果
GET /website/article/_search?q=post_date:2017         	#1条结果

自动或手动为index中的type建立的一种数据结构和相关配置,简称为mapping

dynamic mapping,自动为我们建立index,创建type,以及type对应的mapping,mapping中包含了每个field对应的数据类型,以及如何分词等设置

搜索结果不一样的原因:

因为es自动建立mapping的时候,设置了不同的field不同的data type。不同的data type的分词、搜索等行为是不一样的。所以出现了_all field和post_date field的搜索表现完全不一样。

查看mapping:

GET /website/_mapping/article

{
  "website": {
    "mappings": {
      "article": {
        "properties": {
          "author_id": {
            "type": "long"
          },
          "content": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "post_date": {
            "type": "date"
          },
          "title": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

2.2、精确匹配和全文搜索的对比分析

2.2.1、exact value

2017-01-01,exact value,搜索的时候,必须输入2017-01-01,才能搜索出来

如果你输入一个01,是搜索不出来的

2.2.2、full text

可以对值进行拆分词语后(分词)进行匹配,也可以通过缩写、时态、大小写、同义词等进行匹配

(1)缩写 vs. 全程:cn vs. china

(2)格式转化:like liked likes

(3)大小写:Tom vs tom

(4)同义词:like vs love

2017-01-01,2017 01 01,搜索2017,或者01,都可以搜索出来

china,搜索cn,也可以将china搜索出来

likes,搜索like,也可以将likes搜索出来

Tom,搜索tom,也可以将Tom搜索出来

like,搜索love,同义词,也可以将like搜索出来

2.3、分词器

2.3.1、分词器的作用

切分词语,normalization(提升recall召回率)

normalization,建立倒排索引的时候,会执行一个操作,也就是说对拆分出的各个单词进行相应的处理(时态转换,单复数转换等),以提升后面搜索的时候能够搜索到相关联的文档的概率

recall,召回率:搜索的时候,增加能够搜索到的结果的数量

2.3.2、分词器的结构

character filter:在一段文本进行分词之前,先进行预处理,比如过滤html标签(<span>hello<span> --> hello),& --> and(I&you --> I and you)

tokenizer:分词,hello you and me --> hello, you, and, me

token filter:lowercase,stop word,synonymom,dogs --> dog,liked --> like,Tom --> tom,a/the/an --> 干掉,mother --> mom,small --> little

2.3.3、内置分词器

Set the shape to semi-transparent by calling set_trans(5)

standard analyzer:set, the, shape, to, semi, transparent, by, calling, set_trans, 5   #(默认的是standard)

simple analyzer:set, the, shape, to, semi, transparent, by, calling, set, trans

whitespace analyzer:Set, the, shape, to, semi-transparent, by, calling, set_trans(5)

language analyzer(特定的语言的分词器,比如说,english,英语分词器):set, shape, semi, transpar, call, set_tran, 5

原文地址:https://www.cnblogs.com/hujinzhong/p/11452273.html

时间: 2024-08-01 19:36:14

Elasticsearch系统学习(十一)-mapping的相关文章

Elasticsearch系统学习(一)-elasticsearch简单介绍和核心概念

一.ES简单介绍 1.1.es功能 (1)分布式的搜索引擎和数据分析引擎 搜索:百度,网站的站内搜索,IT系统的检索 数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些:新闻网站,最近1个月访问量排名前3的新闻版块是哪些 分布式,搜索,数据分析 (2)全文检索,结构化检索,数据分析 全文检索:我想搜索商品名称包含牙膏的商品,select * from products where product_name like "%牙膏%" 结构化检索:我想搜索商品分类为日化用品的

Elasticsearch系统学习(三)-基本操作

一.document数据格式 (1)应用系统的数据结构都是面向对象的,复杂的 (2)对象数据存储到数据库中,只能拆解开来,变为扁平的多张表,每次查询的时候还得还原回对象格式,相当麻烦 (3)ES是面向文档的,文档中存储的数据结构,与面向对象的数据结构是一样的,基于这种文档数据结构,es可以提供复杂的索引,全文检索,分析聚合等功能 (4)es的document用json数据格式来表达 { "email": "[email protected]", "firs

Elasticsearch系统学习(七)-ES并发控制

一.ES并发控制原理 1.1.ES并发冲突问题 1.2.悲观锁与乐观锁并发控制图解 ES内部基于_version进行乐观锁并发控制: 二.并发控制实践 2.1.基于_version进行乐观锁并发控制 1)构建数据 PUT /test_index/test_type/7 { "test_field": "test test" } { "_index": "test_index", "_type": "

Elasticsearch系统学习(八)-partial update

一.partial update介绍 1.1.什么是partial update? 1)PUT /index/type/id 创建文档&替换文档,是一样的语法.一般对应到应用程序中,每次的执行流程基本是这样的: (1)应用程序先发起一个get请求,获取到document,展示到前台界面,供用户查看和修改 (2)用户在前台界面修改数据,发送到后台 (3)后台代码,会将用户修改的数据在内存中进行执行,然后封装好修改后的全量数据 (4)然后发送PUT请求,到es中,进行全量替换 (5)es将老的doc

Oracle学习(十一):PL/SQL

1.知识点:可以对照下面的录屏进行阅读 PL/SQL程序结构 declare 说明部分 (变量说明,光标申明,例外说明 ] begin 语句序列 (DML语句]- exception 例外处理语句 End; / ------------------------------------------------------------------ --第一个PL/SQL程序:HelloWorld set serveroutput on --如果要在屏幕上输出信息,需要将serveroutput开关打

Linux系统学习之路和常用命令及其他系统相关内容

Linux系统学习之路 目录 Linux系统学习之路[第一篇]:Linux目录和基础知识 Linux系统学习之路[第二篇]:文件操作,文件查看,find查找 Linux系统学习之路[第三篇]:grep,vim,压缩功能详解 Linux系统学习之路[第四篇]:mount,rpm,yum,yum组讲解 Linux系统学习之路[第五篇]:用户和用户组管理 Linux系统学习之路[第六篇]:权限管理 Linux系统学习之路[第七篇]:磁盘和文件管理 Linux系统学习之路[第八篇]:LVM逻辑卷和RAI

Linux系统理解以及Linux系统学习心得

原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Linux系统的理解 1.加载Linux内核准备:在加载基本输入输出模块(BIOS)之后,从磁盘的引导扇区读入操作系统的代码文件块到内存中,之后开始整个系统的初始化. 2.main.c的start_kernel函数是整个操作系统的入口,这也与Linux是基于C语言的特性相符,start_kernel具体做的动作很多

Elasticsearch的学习笔记

在介绍Elasticsearch的用法之前先讲讲为什么要用它吧.首先学习搜索引擎,肯定不可避免的都听过lucene,solr和Elasticsearch都是基于它的.spinx文章很多,但是数据库的入侵性太强(插件模式).Elasticsearch是当下最流行的分布式搜索引擎之一.solr也稍微玩过,文章也多.同时也希望能通过Elasticsearch进一步学习完善自己对于分布式的学习.更深入的同学可以考虑开始学习ELK(Elasticsearch, Logstash, Kibana). 推荐:

如何系统学习java体系?

如何系统学习java体系? | 浏览:1248 | 更新:2013-08-26 14:56 | 标签:java 1 2 3 4 分步阅读 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,它在工业界应用非常广泛,掌握好java这门技术,你能轻松找一份java程序员的工作. 工具/原料 一些书.一台电脑 方法/步骤 学java首先你要学 J2SE,它是java体系的基础,也是重中之重.很多人往往不重视基础,其实这是舍本逐末的做法.说这么多就是希望大家能重视基础,能在这条路上走的更远.