索引可以认为是记录的优化集合,每个记录都是字段的集合,这些字段是包含数据的键值对。
Index templates定义了在创建新索引时可以自动应用的settings和mappings。 Elasticsearch根据 与索引名称匹配的index pattern 将模板应用于创建新索引。 index_patterns 是创建索引过程中用于匹配索引名称的通配符表达式数组。 多个索引模板可以与一个索引匹配,在这种情况下,设置和映射都将合并到该索引的最终配置中。 可以使用order参数控制合并的顺序,首先应用较低的order,然后较高的order覆盖这些配置。
1、Mapping 是定义记录及其包含的字段的存储和索引方式的过程。 例如,使用Mapping 定义:
哪些字符串字段应视为 full text 字段。
哪些字段包含数字,日期或地理位置。
日期值的格式。
自定义规则来控制动态添加字段的映射。
Mapping 将索引中的记录分为逻辑组,并指定字段的特征。 这些特征包括字段的可搜索性,以及是否被标记化或分解成单独的单词
每个索引都有一个mapping type ,该mapping type确定如何对文档建立索引。mapping type 在6.0.0版本被废弃。
映射参数 fields : 为不同的目的以不同的方式为同一字段建立索引通常很有用。 这是多领域的目的
PUT my_index
{
"mappings": {
"properties": {
"city": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
如上图所示, city字段是 text类型, 而city.keyword 是keyword类型。
2、
Elasticsearch按相关性得分对匹配的搜索结果进行排序,该得分衡量每个记录与查询的匹配程度。相关性分数在搜索API的_score元字段中返回。 _score越高,记录越相关。 尽管每种查询类型可以不同地计算相关性分数,但是分数计算还取决于查询子句是在query context中运行还是在filter context中运行
query context:
在查询上下文中,查询子句回答以下问题:“此文档与该查询子句的匹配程度如何?” 除了确定文档是否匹配之外,查询子句还计算_score元字段中的相关性得分。
filter context:
在过滤器上下文中,查询子句回答问题“此记录是否与此查询子句匹配?” 答案是简单的“是”或“否”,即不计算相关分数。 过滤器上下文主要用于过滤结构化数据
constant_score 查询:
包装filter查询,并返回相关分数等于boost参数值的每个匹配记录。 boost参数值默认为1.0
3、
索引模板允许定义将自动应用于创建新索引的模板。 模板包括设置和映射,以及一个简单的模式模板,该模板控制是否将模板应用于所创建的索引
4、聚合
①每个bucket 都与一个key和一个记录标准相关联。 执行聚合时,将对上下文中的每个记录评估所有的bucket条件,并且当条件匹配时,该记录将被视为“落入”相关bucket。(bucket应该就是用来分组的)
②pipeline : Aggregations that aggregate the output of other aggregations and their associated metrics
聚合可以嵌套
聚合的基本结构:
"aggregations" : {
"<aggregation_name>" : {
"<aggregation_type>" : {
<aggregation_body>
}
[,"meta" : { [<meta_data_body>] } ]?
[,"aggregations" : { [<sub_aggregation>]+ } ]?
}
[,"<aggregation_name_2>" : { ... } ]*
}
4、
Text数据类型 (该类型的字段在索引时会被分词)
对这些字段进行分析,即将它们通过分析器处理,以在将其编入索引之前将字符串转换为单个term的列表。 通过分析的过程,Elasticsearch可以在每个全文本字段中搜索单个单词。
默认的标准分析器按如下方式更改text字段值:
删除大多数标点符号
将剩余内容分为单个词,称为tokens
小写tokens
为了更好地搜索text字段,match查询还会在执行搜索之前分析您提供的搜索term。 这意味着match查询可以在text字段中搜索分析的token,而不是确切的term。
term查询不会分析搜索的term。 term查询仅搜索您提供的确切term。 这意味着在搜索text字段时,term查询可能会返回不良结果或没有结果。
Keyword数据类型(该类型的字段在索引时不会被分词)
Keyword字段 用于索引结构化内容(例如ID,电子邮件地址,主机名,状态代码,邮政编码或标签)。它们通常用于过滤,排序和聚合。keyword字段只能按其确切值进行搜索。