elasticSearch中文文档

elasticSearch-权威指南-中文版
Kibana 用户手册
elasticSearch-中文社区
elasticSearch-参考手册-api
elasticSearch-客户端-api

分词器调试

以下是分词器调试的全部过程

开始调试

  1. 查看分词结果语句
//myindex:index
//_analyze:要进行的查看分词结果操作
//whitespace:使用的分词器
//You're the 1st runner home!:实验用的文本数据
GET myindex/_analyze
{
 "tokenizer":"whitespace",
 "text":"You're the 1st runner home!" 
}
  1. 分词过程解析
    做全文搜索就需要对文档分析、建索引。从文档中提取词元(Token)的算法称为分词器(Tokenizer),在分词前预处理的算法称为字符过滤器(Character Filter),进一步处理词元的算法称为词元过滤器(Token Filter),最后得到词(Term)。这整个分析算法称为分析器(Analyzer)。
    文档包含词的数量称为词频(Frequency)。搜索引擎会建立词与文档的索引,称为倒排索引(Inverted Index)。
String
String
Tokens
Tokens
Input
CharacterFilters
Tokenizer
TokenFilters
Output

Analyzer 按顺序做三件事:

使用 CharacterFilter 过滤字符
使用 Tokenizer 分词
使用 TokenFilter 过滤词

每一部分都可以指定多个组件。
Elasticsearch 默认提供了多种 CharacterFilter、Tokenizer、TokenFilter、Analyzer,你也可以下载第三方的 Analyzer 等组件
Analyzer 一般会提供一些设置。如 standard Analyzer 提供了 stop_words 停用词过滤配置。

以下样例构造了名为 standard 的 standard Analyzer 类型的带停用词列表的分析器:

PUT /my-index/_settings
{
  "index": {
    "analysis": {
      "analyzer": {
        "standard": {
          "type": "standard",
          "stop_words": [ "it", "is", "a" ]
        }
      }
    }
  }
}

你也可以通过 Setting API 构造组合自定义的 Analyzer。如:

PUT /my-index/_settings
{
  "index": {
    "analysis": {
      "analyzer": {
        "custom": {
          "type": "custom",
          "char_filter": [ "html_strip" ],
          "tokenizer": "standard",
          "filter": [ "lowercase", "stop", "snowball" ]
        }
      }
    }
  }
}

这构造了名为 custom 的 Analyzer,它完成以下工作:

使用 html_strip 字符过滤器,移除 html 标签
使用 standard 分词器,分词
使用 lowercase 词过滤器,转为小写单词
使用 stop 词过滤器,过滤停用词
使用 snowball 词过滤器,用 snowball 雪球算法 提取词干

使用 Analyze API 分析给定文档,通过这种方式可以检查配置的行为是正确的。如:

POST /my-index/_analyze?analyzer=standard
quick brown

返回:

{
  "tokens": [
    {
      "token": "quick",
      "start_offset": 0,
      "end_offset": 5,
      "type": "",
      "position": 0
    },
    {
      "token": "brown",
      "start_offset": 6,
      "end_offset": 11,
      "type": "",
      "position": 1
    }
  ]
}

在给目标索引建映射时,指定待分析的字段的分析器来使用我们构造的分析器。如:

PUT /my-index/_mapping/my-type
{
  "my-type": {
    "properties": {
      "name": {
        "type": "string",
        "analyzer": "custom"
      }
    }
  }
}

如果希望使用多种分析器得到不同的分词,可以使用 multi-fields 特性,指定多个产生字段:

PUT /my-index/_mapping/my-type
{
  "my-type": {
    "properties": {
      "name": {
        "type": "string",
        "analyzer": "standard",
        "fields": {
          "custom1": {
            "type": "string",
            "analyzer": "custom1"
          },
          "custom2": {
            "type": "string",
            "analyzer": "custom2"
          }
        }
      }
    }
  }
}

这样你可以通过 name、name.custom1、name.custom2 来使用不同的分析器得到的分词。

查询时也可以指定分析器。如:

POST /my-index/my-type/_search
{
  "query": {
    "match": {
      "name": {
        "query": "it's brown",
        "analyzer": "standard"
      }
    }
  }
}

或者在映射中分别指定他们。如:

PUT /my-index/_mapping/my-type
{
  "my-type": {
    "properties": {
      "name": {
        "type": "string",
        "index_analyzer": "custom",
        "search_analyzer": "standard" 
      }
    }
  }
}

然后索引一些文档,使用简单的 match 查询检查一下,如果发现问题,使用 Validate API 检查一下。如:

POST /my-index/my-type/_validate/query?explain
{
  "query": {
    "match": {
      "name": "it's brown"
    }
  }
}
  1. 部分更新文档

执行语句如下:

POST /website/blog/1/_update
{
  "doc" : {
     "tags" : [ "testing" ],
     "views": 0
  }
}

//响应结果:

{
   "_index" :   "website",
   "_id" :      "1",
   "_type" :    "blog",
   "_version" : 3
}

//更新后的 _source 字段:

{
   "_index":    "website",
   "_type":     "blog",
   "_id":       "1",
   "_version":  3,
   "found":     true,
   "_source": {
      "title":  "My first blog entry",
      "text":   "Starting to get the hang of this...",
      "tags": [ "testing" ], 
      "views":  0 
   }
}
>//更新的文档可能还不存在,则进行新增
>//retry_on_conflict:若发生冲突,重试的次数
>//先执行script操作,若文档尚不存在,则执行upsert的新增操作
>//script还可改为ctx._source.views="value",此时value值不支持特殊字符
>POST /website/pageviews/1/_update?retry_on_conflict=5 
{
   "script" : "ctx._source.views+=1",
   "upsert": {
       "views": 0
   }
}
  1. 新增文档

//由es自动生成id

POST /website/blog/
{ ... }

//自定义id

 >PUT /website/blog/123?op_type=create
{ ... }

//自定义id

PUT /website/blog/123/_create
{ ... }
  1. 删除文档
DELETE /website/blog/123
  1. 取回多个文档1 功能

//执行语句

GET /_mget
{
  "docs" : [
     {
        "_index" : "website",
        "_type" :  "blog",
        "_id" :    2
     },
     {
        "_index" : "website",
        "_type" :  "pageviews",
        "_id" :    1,
        "_source": "views"
     }
  ]
}

//响应体

{
   "docs" : [
      {
         "_index" :   "website",
         "_id" :      "2",
         "_type" :    "blog",
         "found" :    true,
         "_source" : {
            "text" :  "This is a piece of cake...",
            "title" : "My first external blog entry"
         },
         "_version" : 10
      },
      {
         "_index" :   "website",
         "_id" :      "1",
         "_type" :    "pageviews",
         "found" :    true,
         "_version" : 2,
         "_source" : {
            "views" : 2
         }
      }
   ]
}

//如果有相同的index和type

GET /website/blog/_mget
{
   "docs" : [
      { "_id" : 2 },
      { "_type" : "pageviews", "_id" :   1 }
   ]
}
 GET /website/blog/_mget
{
   "ids" : [ "2", "1" ]
}
  1. 自定义分词器,停词
{
   "settings":{
       "index":{
           "number_of_shards":"8",
           "number_of_replicas":"1"
       },
   	"analysis": {
   		"analyzer": {
   		//自定义分词器及过滤器
   			"my_lowercaser": {
   				"tokenizer": "standard",
   				"filter":  [ "lowercase","param_stop" ] 
   			}
   		},
   		"filter": {
   		//自定义停词
   			"param_stop": {
   				"type":"stop",
   				"stopwords":[",","-","_"]
   			}
   		}
   	}
   },
   "mappings": {
         "typeName": {
           "_ttl": {
             "enabled": false
           },
           "dynamic": "false",
           "_timestamp": {
             "enabled": true
           },
           "_all": {
             "enabled": false
           },
           "properties": {
             "updateDate": {
               "format": "strict_date_optional_time||epoch_millis",
               "type": "date"
             },
             "cId": {
             //不进行分词
               "index": "not_analyzed",
               "type": "string"
             },
             "name": {
             //定义搜索时分词器
               "search_analyzer": "my_lowercaser",
               //定义创建分词索引时的分词器
               "analyzer": "my_lowercaser",
               "store": true,
               "type": "string"
             }
      }
   }
 }
}
  1. 查询
GET /_search
{
   "query": {
       "match": {
           "tweet": "elasticsearch"
       }
   }
}

14.合并查询

//叶子语句(Leaf clauses) (就像 match 语句) 被用于将查询字符串
//和一个字段(或者多个字段)对比。复合(Compound) 语句 主要用于 
//合并其它查询语句。 比如,一个 bool 语句 允许在你需要的时候
//组合其它语句,无论是 must 匹配、 must_not 匹配还是 should 匹配
//,同时它可以包含不评分的过滤器(filters)
{
    "bool": {
        "must":     { "match": { "tweet": "elasticsearch" }},
        "must_not": { "match": { "name":  "mary" }},
        "should":   { "match": { "tweet": "full text" }},
        "filter":   { "range": { "age" : { "gt" : 30 }} }
    }
}

复合查询

//找出信件正文包含 business opportunity 的星标邮件,或者在收件
//箱正文包含 business opportunity 的非垃圾邮件
{
    "bool": {
        "must": { "match":   { "email": "business opportunity" }},
        "should": [
            { "match":       { "starred": true }},
            { "bool": {
                "must":      { "match": { "folder": "inbox" }},
                "must_not":  { "match": { "spam": true }}
            }}
        ],
        "minimum_should_match": 1
    }
}

使用sql查询

POST /_xpack/sql?format=txt
{
  "query": "SELECT * FROM my_index"
}
//将sql转为标准的dsl语言
POST _xpack/sql/translate
{
  "query": "SELECT * FROM my_index"
}

设置高亮及查询

PUT my_index
{
 "settings": {
   "analysis": {
     "analyzer": {
       "my_analyzer": {
         "tokenizer": "standard",
         "char_filter": [
           "my_char_filter"
         ],
         "filter": [
           "lowercase"
         ]
       }
     },
     "char_filter": {
       "my_char_filter": {
         "type": "pattern_replace",
         "pattern": "(?<=\\p{Lower})(?=\\p{Upper})",
         "replacement": " "
       }
     }
   }
 },
 "mappings": {
   "my_type": {
     "properties": {
       "name": {
         "type": "text",
         "analyzer": "my_analyzer",
         "index_options" : "offsets"
       },
       "cname": {
         "type": "text",
         "analyzer": "my_analyzer",
         "index_options" : "offsets"
       }
     }
   }
 }
}

GET my_index/_search
{
   "query" : {
     "bool": {
       "should": [
         {
           "match": {
             "name": "fox"
           }
         },
         {
           "match": {
             "cname": "thousand"
           }
         }
       ]
     }
   },
   "highlight" : {
       "fields" : {
           "name":{
             "type": "plain",
               "fragment_size" : 150,
               "number_of_fragments" : 2,
               "fragmenter": "simple"
           },
           "cname":{
             "type": "plain",
               "fragment_size" : 500,
               "number_of_fragments" : 3,
               "fragmenter": "simple"
           }
       }
   }
}

PUT my_index/my_type/1
{
 "name" : "For you I'm only a fox like a hundred thousand other foxes. But if you tame me, we'll need each other. You'll be the only boy in the world for me. I'll be the only fox in the world for you.",
 "cname":"For you I'm only a fox like a hundred thousand other foxes. But if you tame me, we'll need each other."
}

  1. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: elasticSearch中文文档_第1张图片

带尺寸的图片: elasticSearch中文文档_第2张图片

居中的图片: elasticSearch中文文档_第3张图片

居中并且带尺寸的图片: elasticSearch中文文档_第4张图片

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

你可能感兴趣的:(知识点汇总)