Elasticsearch学习笔记:index,mapping

关键词:term, token, index, mapping
index,mapping是理解ela原理的两个关键概念。

index

首先,我们可以在kibana或curl命令行方式任意输入关键字进行全文检索是基于ela内部对信息存储的方式。一种称为倒排索引的方式(网上很多介绍这个概念,一看就懂)。了解了它又自然而然明白了文本的词、句在被索引前需要经过合适方式的处理。
elasticsearch对词句的分析(三个过程组合而成)
character filter(字符过滤:去除无用标记html)
tokenizer(分词器:根据分隔符断词)
token filter(表征过滤:转换小写,去词,增加词)
内建分析器:
标准分析器
简单分析器
空格分析器
语言分析器

当我们索引一个文档时,全文字段会被分析为单独的词用以创建倒排索引。当我们在全文字段搜索时,也要让查询字符串经过同样的分析流程处理,确保这些词在索引中存在。

就是说,原文经过分析后以合适的语法语言形式(比如大写变小写,复数变单数)保存。而我们进行查询时的输入也需要经过这样的转换才能匹配。
为了保证document的每个字段field都能以正确的格式存储索引,这就需要在创建索引时通过mapping定义,来规定不同字段的格式类型,如何被索引等。

Mapping映射

当Elasticsearch 在你的文档中探测到一个新的字符串字段,它将自动设置它为全文string字段并用standard分析器分析。
也许我们想要一个更适合这个数据的语言分析器。或者不做任何分析,只存储确切值。为了达到这种效果,必须通过mapping人工设置这些字段。

创建索引时配置映射

“index参数控制字符串以何种方式被索引
analyzed: 分析并索引,会导致分词,大小写等变化
not_analyzed: 索引,但不分析,内容和指定值完全一致
no:不索引, 不会被搜索到
类型说明
根据官方文档

PUT /gb
{
  "mappings": {
    "tweet": {            # <-- tweet对应 type
      "properties": {
        "tweet": {        # <-- 对应具体的字段名(下面包含三个参数名type, index, analyzer)
          "type": "string",             ## string类型默认index值为analyzed
          "analyzer": "english"     ## 指明使用英语分析器 
        },
        "date": {
          "type": "date"
        },
        "name": {
          "type": "string"
        },
        "user_id": {
          "type": "long"
        }
      }
    }
  }
}

原有mapping增加

PUT /gb/_mapping/tweet
{
  "properties": {
    "tag": {
      "type": "string",
      "index": "not_analyzed"
    }
  }
}

测试映射

GET /gb/_analyze?field=name
{
  "text": "Black-cats"
}
输出结果:
{
  "tokens": [
    {
      "token": "black",
      "start_offset": 0,
      "end_offset": 5,
      "type": "",
      "position": 0
    },
    {
      "token": "cats",
      "start_offset": 6,
      "end_offset": 10,
      "type": "",
      "position": 1
    }
  ]
}

你可能感兴趣的:(Elasticsearch学习笔记:index,mapping)