Elasticsearch-10.多字段特性及配置自定义Analyzer和Index Template和Dynamic Template

Elasticsearch

多字段特性及配置自定义Analyzer

多字段类型

在这里插入图片描述

Exact Values v.s Full Text

  • Excat values V.S Full Text
    • Exact Value:包括数字/日期/具体一个字符串(例如“Apple Store”)
      • Elasticseach 中的keyword
    • 全文本, 非结构化的文本数据
      • Elasticsearch 中的text

在这里插入图片描述

Exact Values不需要被分词

  • Elasticsearch 为每一个字段创建一个倒排索引
    • Exact Value在索引时,不需要做特殊的分词处理

在这里插入图片描述

自定义分词

  • 当 Elasticsearch自带的分词器无法满足时,可以自定义分词器。通过自组合不同的组
    件实现.
    • Character Filter
    • Tokenizer
    • Token Filter

Character Filters

  • 在Tokenizer之前对文本进行处理,例如增加删除及替换字符。可以配置
    多个Character Filters。 会影响Tokenizer的position和offset信息
  • 一些自带的Character Filters
    • HTML strip 一出除html标签
    • Mapping -字符串 替换
    • Pattern replace - -正则匹配替换

Tokenizer

  • 将原始的文本按照一 定的规则,切分为词(term or token)

  • Elasticsearch 内置的Tokenizers

    • whitespace/ standard / uax_ ur _email / pattern / keyword / path hierarchy
  • 可以用Java开发插件,实现自己的Tokenizer

Token Filters

  • 将Tokenizer输出的单词( term ),进行增加,修改,删除
  • 自 带的Token Filters
    • Lowercase / stop / synonym (添加近义词)

设置一个Custom Analyzer

在这里插入图片描述

API

PUT logs/_doc/1
{"level":"DEBUG"}

GET /logs/_mapping

POST _analyze
{
  "tokenizer":"keyword",
  "char_filter":["html_strip"],
  "text": "<b>hello world</b>"
}


POST _analyze
{
  "tokenizer":"path_hierarchy",
  "text":"/user/ymruan/a/b/c/d/e"
}



#使用char filter进行替换
POST _analyze
{
  "tokenizer": "standard",
  "char_filter": [
      {
        "type" : "mapping",
        "mappings" : [ "- => _"]
      }
    ],
  "text": "123-456, I-test! test-990 650-555-1234"
}

//char filter 替换表情符号
POST _analyze
{
  "tokenizer": "standard",
  "char_filter": [
      {
        "type" : "mapping",
        "mappings" : [ ":) => happy", ":( => sad"]
      }
    ],
    "text": ["I am felling :)", "Feeling :( today"]
}

// white space and snowball
GET _analyze
{
  "tokenizer": "whitespace",
  "filter": ["stop","snowball"],
  "text": ["The gilrs in China are playing this game!"]
}


// whitespace与stop
GET _analyze
{
  "tokenizer": "whitespace",
  "filter": ["stop","snowball"],
  "text": ["The rain in Spain falls mainly on the plain."]
}


//remove 加入lowercase后,The被当成 stopword删除
GET _analyze
{
  "tokenizer": "whitespace",
  "filter": ["lowercase","stop","snowball"],
  "text": ["The gilrs in China are playing this game!"]
}

//正则表达式
GET _analyze
{
  "tokenizer": "standard",
  "char_filter": [
      {
        "type" : "pattern_replace",
        "pattern" : "http://(.*)",
        "replacement" : "$1"
      }
    ],
    "text" : "http://www.elastic.co"
}




Index Template和Dynamic Template

管理很多的索引|

  • 集群上的索引会越来越多, 例如,你会为你的日志每天创建-个索引
    • 使用多个索引可以让你更好的管理你的数据,提高性能
    • logs-2019-05-01
    • logs- -2019-05- -02
    • logs- 2019-05-03

什么是Index Template

  • Index Templates -帮助你设定Mappings和Settings,并按照一定 的规则,
    自动匹配到新创建的索引之上
    • 模版仅在一个索引被新创建时, 才会产生作用。修改模版不会影响已创
      建的索引
    • 你可以设定多 个索引模版,这些设置会被“merge”在一起
    • 你可以指定 “order”的数值,控制“merging”的过程

两个Index Templates

在这里插入图片描述

Index Template的工作方式

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

什么是Dynamic Template

  • 根据Elasticsearch识别的数据类型,结合字段名称,来动态设定字段类型

     +  所有的字符串类型都设定成Keyword, 或者关闭keyword字段
     
    +  is开头的字段都设置成boolean 
    
    +  long_ 开头的都设置成long类型
    

Dynamic T emplate

在这里插入图片描述

匹配规则参数

在这里插入图片描述

API


#数字字符串被映射成text,日期字符串被映射成日期
PUT ttemplate/_doc/1
{
	"someNumber":"1",
	"someDate":"2019/01/01"
}
GET ttemplate/_mapping


#Create a default template
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
    }
}

#查看template信息
GET /_template/template_default
GET /_template/temp*


#写入新的数据,index以test开头
PUT testtemplate/_doc/1
{
	"someNumber":"1",
	"someDate":"2019/01/01"
}
GET testtemplate/_mapping
get testtemplate/_settings

PUT testmy
{
	"settings":{
		"number_of_replicas":5
	}
}

put testmy/_doc/1
{
  "key":"value"
}

get testmy/_settings
DELETE testmy
DELETE /_template/template_default
DELETE /_template/template_test



#Dynaminc Mapping 根据类型和字段名
DELETE my_index

PUT my_index/_doc/1
{
  "firstName":"Ruan",
  "isVIP":"true"
}

GET my_index/_mapping
DELETE my_index
PUT my_index
{
  "mappings": {
    "dynamic_templates": [
            {
        "strings_as_boolean": {
          "match_mapping_type":   "string",
          "match":"is*",
          "mapping": {
            "type": "boolean"
          }
        }
      },
      {
        "strings_as_keywords": {
          "match_mapping_type":   "string",
          "mapping": {
            "type": "keyword"
          }
        }
      }
    ]
  }
}


DELETE my_index
#结合路径
PUT my_index
{
  "mappings": {
    "dynamic_templates": [
      {
        "full_name": {
          "path_match":   "name.*",
          "path_unmatch": "*.middle",
          "mapping": {
            "type":       "text",
            "copy_to":    "full_name"
          }
        }
      }
    ]
  }
}


PUT my_index/_doc/1
{
  "name": {
    "first":  "John",
    "middle": "Winston",
    "last":   "Lennon"
  }
}

GET my_index/_search?q=full_name:John
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elasticsearch-7.12.0-py2.py3-none-any.whl 是 Elasticsearch 的 Python 客户端库的一个安装文件。Elasticsearch 是一个开源的实时分布式搜索和分析引擎,用于处理大规模数据集。它提供了一个简单可扩展的 RESTful API 接口,允许用户进行高效的数据搜索、分析以及存储。 这个安装文件的命名规则是根据 Python 的支持版本以及可运行平台来命名的。-py2.py3 表示可以同时兼容 Python 2 和 Python 3 版本的代码。-none-any 表示它是一个纯 Python 代码的库,不依赖于特定的操作系统或平台。 通过安装 elasticsearch-7.12.0-py2.py3-none-any.whl,您可以轻松地在您的 Python 环境中使用 Elasticsearch。这个库提供了许多功能,包括连接到 Elasticsearch 实例、执行索引、搜索和分析操作,以及管理和维护 Elasticsearch 的集群和节点。您可以使用这个库来构建各种应用,如全文搜索引擎、实时日志分析等。 要安装 elasticsearch-7.12.0-py2.py3-none-any.whl,您可以使用 pip 工具,在命令行中运行以下命令: ``` pip install elasticsearch-7.12.0-py2.py3-none-any.whl ``` 安装成功后,您就可以在您的 Python 代码中导入 elasticsearch 模块,并开始使用 Elasticsearch 的功能了。 总结:elasticsearch-7.12.0-py2.py3-none-any.whl 是 Elasticsearch 的 Python 客户端库的安装文件,用于连接、操作和管理 Elasticsearch 实例。通过安装这个库,您可以在您的 Python 项目中轻松使用 Elasticsearch 的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值