es核心技术与实战 Day06(Term)

Index Template

  • Index Templates -帮助你设定Mappings和Settings, 并按照一-定的规则,自动匹配到新创建的索引之上
    • 模版仅在一个索引被新创建时,才会产生作用。修改模版不会影响已创建的索引
    • 你可以设定多个索引模版,这些设置会被“merge"在一 起
    • 你可以指定 “order”的数值,控制“merging’ 的过程
PUT _template/template_default
{
	"index_ patterns": ["*"],
	"order" : 0,
	"version": 1,
	settings": {
		//主分片
		"number_ of_ shards": 1,
		副本分片
		"number_ of_ replicas":1
	}
}

PUT  _template/template_test
{
	"index_ patterns" : ["test*"],
	"order" : 1,
	"settings" : {
		"number_ of .shards": 1,
		"number_ of replicas" : 2
	},
	"mappings"{
		"date_ detection": false,
		"numeric_ detection": true
	}
}

Index Template的工作方式

  • 当一个索 引被新创建时
    • 应用Elasticsearch默认的settings和mappings
    • 应用order数值低的Index Template中的设定
    • 应用order高的Index Template中的设定,之前的设定会被覆盖
    • 应用创建 索引时,用户所指定的Settings和Mappings,并覆盖之前模版中的设定

Aggregation

  • Elasticsearch除搜索以外,提供的针对ES数据进行统计分析的功能
    • 实时性高
    • Hadoop (T+1)
  • 通过聚合, 我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档
    • 尖沙咀和香港岛的客房数量
    • 不同的价格区间,可预定的经济型酒店和五星级酒店的数量
    • 高性能, 只需要一-条语句,就可以从Elasticsearch得到分析结果
    • 无需在客户端自己去实现分析逻辑

集合的分类

  • Bucket Aggregation -一些列满足特定条件的文档的集合
  • Metric Aggregation-一些数学运算,可以对文档字段进行统计分析
  • Pipeline Aggregation -对其他的聚合结果进行二次聚合
  • Matrix Aggregration-支持对多个字段的操作并提供一个结果矩阵

测试

  1. 判断题: ES支持使用HTTP PUT写入新文档,并通过Elasticsearch 生成文档Id
    错,写入新文档用POST命令创建
  2. 判断题: Update 一个文档,需要使用HTTP PUT
    错,update文档,用POST,PUT只能用来做index或者Create
  3. 判断题: Index 一个已存在的文档,旧的文档会先被删除,新的文档再被写入,同时版本号加1
  4. 尝试描述创建一 个新的文档到一个不存在的索引中,背后会发生一些什么?
    默认情况下会自动创建相应的索引,并且自己设置Mapping
  5. ES 7中的合法的type是什么?
    _doc
  6. 精确值和全文本的本质区别是什么?
    精确值不会被Analyzer分词,全文本会
  7. Analyzer 由哪几个部分组成?
    三部分,Character Filter + Tokenizer + Token Filter
  8. 尝试描述 match和match_ phrase 的区别
    match中的terms 之间是or的关系,match_ phrase的terms 之间是and的关系,并且term之间位置关系也影响搜索的结果
  9. 如果你希望match_phrase 匹配到更多结果,你应该配置查询中什么参数?
    slop (中间可以有其他字符)
  10. 如果 Mapping的dynamic设置成“strict", 索引一个包含新增字段的文档时会发生什么?
    直接报错
  11. 如果Mapping的dynamic设置成“false”, 索引一个包含新增字段的文档时会发生什么?
    文档被索引,新的字段在_source中可见。但是该字段无法被搜索
  12. 判断: 可以把一个字段的类型从“integer" 改成“long”,因为这两个类型是兼容的
    错,修改字段类型,需要重新reindex
  13. 判断: 你可以在Mapping文件中为indexing 和searching指定不同的analyzer
  14. 判断:字段类型为Text的字段,一定可以被全文搜索
    错,指定为Not Indexed时,无法被搜索。

基于Term的查询

  • Term 是表达语意的最小单位。搜索和利用统计语言模型进行自然语言处理都需要处理Term
  • Term Level Query: Term Query / Range Query / Exists Query / Prefix Query /Wildcard Query
  • 在ES 中,Term查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分-例如“Apple Store”
  • 可以通过Constant Score将查询转换成一个Filtering,避免算分,并利用缓存,提高性能
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "productID" : "XHDK-A-1293- #fJ3""desc" :"iPhone" }
{ "index": { "_id": 2 }}
{ "productID" : "KDKE -B-9947- #kL5" , "desc":"iPad" }
{ "index": { "_id": 3 }}
{ "productID" : "JODL -X-1937-#pV7" , "desc" :"MBP" }

复合查询—Constant Score转为Filter

将Query转成Filter,忽略TF -IDF计算,避免相关性算分的开销
Filter可以有效利用缓存

POST /products/_search
{
  "explain": true,
  "query": {
    "constant_ score": {
      "filter": {
        "term": {
          "productID.keyword": "XHDK-A-1293-#fJ3"
        }
      }
    }
  }
}

基于全文的查询

  • 基于全文本的查找

    • Match Query / Match Phrase Query / Query String Query
  • 特点

  • 索引和搜索时都会进行分词,查询字符串先传递到一个合适的分词器,然后生成- -个供查询的词
    项列表.

  • 查询时候,先会对输入的查询进行分词,然后每个词项逐个进行底层的查询,最终将结果进行合
    并。并为每个文档生成-个算分。-例如查“Matrix reloaded",会查到包括Matrix或者reload的所有结果。

//"operator": "and"同时含有两个词
//"minimum_should_match": 2 控制查询精准度
POST movies/_search
{
  "query": {
    "match": {
      "title": {
        "query": "Matrix reloaded",
        "operator": "and"
      }
    }
  }
}

POST movies/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "Matrix reloaded",
        "slop": 1
      }
    }
  }
}

es核心技术与实战 Day06(Term)_第1张图片

结构化数据

  • 结构化搜索 (Structured search)是指对结构化数据的搜索
    • 日期,布尔类型和数字都是结构化的
  • 文本也可以是 结构化的。
    1. 如彩色笔可以有离散的颜色集合: 红(red) 、绿(green) 、蓝(blue)
    2. 一个博客可能被标记了标签,例如,分布式(distributed) 和搜索(search)
    3. 电商网站上的商品都有UPCs (通用产 品码Universal Product Codes)或其他的唯一
    4. 标识,它们都需要遵从严格规定的、结构化的格式。

你可能感兴趣的:(elasticsearch)