- 分析 API
- 请求
- 前置条件
- 路径参数
- 查询参数
- 示例
- 未指定索引
- 文本串数组
- 自定义分析器
- 指定索引
- 从字段映射导出分析器
- 规范化器
- 解释分析
- 设置标记限制
分析 API
对文本字符串执行分析并返回结果 token(标记)。
GET /_analyze{"analyzer" : "standard","text" : "Quick Brown Foxes!"}
请求
GET /_analyze
POST /_analyze
GET /<index>/_analyze
POST /<index>/_analyze
前置条件
- 如果 Elasticsearch 安全特性启用,你对指定索引必须有
manage索引权限。
路径参数
<index>
(可选,字符串)用于产生分析器的索引。
如果指定,<analyzer> 或 <field> 将覆盖此值。
如果没有指定分析器或字段,则分析 API 将为索引使用默认分析器。
如果没有指定索引或索引没有默认分析器,则分析 API 使用标准分析器。
查询参数
-analyzer
(可选,字符串)将用于提供的 text 的分析器的名称。这可以是一个内置分析器,也可以是在索引中配置的分析器。
如果未指定此参数,则分析 API 将使用该字段映射中定义的分析器。
如果没有指定字段,分析 API 将对索引使用默认分析器。
如果没有指定索引,或者索引没有默认分析器,则分析 API 使用标准分析器。
attributes
(可选,字符串数组)用于过滤 explain 参数输出的 token(标记)属性数组。
char_filter
(可选,字符串数组)在 tokenizer(标记器)之前,预处理字符的字符过滤器数组。参阅字符过滤器参考获知一系列的字符过滤器。
explain
(可选,布尔值)如果为 true,响应包含标记的属性和更多详情。默认为 false。【更多详情信息的格式在 Lucene 中被标记为实验性的,将来可能会改变。】
field
(可选,字符串)用于导出分析器的字段。要使用该参数,必须指定一个索引。
如果指定,参数 analyzer 将覆盖此值。
如果没有指定字段,分析 API 将对索引使用默认分析器。
如果没有指定索引或索引没有默认分析器,则分析 API 使用标准分析器。
filter
(可选,字符串数组)用于在标记器之后应用的标记过滤器数组。参阅标记过滤器参考获知一系列的标记过滤器。
normalizer
(可选,字符串)用于将文本转换为单个标记的规范化器。参阅规范化器获知一系列的规范化器。
text
(必需,字符串或字符串数组)待分析的文本。如果是字符串数组,会作为多值字段分析。
tokenizer
(可选,字符串)标记器,用于将文本转换为标记。参阅标记器获知一系列的标记器。
示例
未指定索引
你可以对文本串应用任何内置分析器,不用指定索引的。
GET /_analyze{"analyzer" : "standard","text" : "this is a test"}
文本串数组
如果参数 text 以字符串数组形式提供,它会作为多值字段分析。
GET /_analyze{"analyzer" : "standard","text" : ["this is a test", "the second text"]}
自定义分析器
你可以使用分析 API 来测试从标记器、标记过滤器和字符过滤器构建的自定义 transient(瞬态)分析器。标记过滤器使用 filter 参数:
GET /_analyze{"tokenizer" : "keyword","filter" : ["lowercase"],"text" : "this is a test"}
GET /_analyze{"tokenizer" : "keyword","filter" : ["lowercase"],"char_filter" : ["html_strip"],"text" : "this is a <b>test</b>"}
自定义标记器、标记过滤器和字符过滤器可以在请求体中指定,如下所示:
GET /_analyze{"tokenizer" : "whitespace","filter" : ["lowercase", {"type": "stop", "stopwords": ["a", "is", "this"]}],"text" : "this is a test"}
指定索引
你也可以针对特定的索引运行分析 API:
GET /analyze_sample/_analyze{"text" : "this is a test"}
上面的代码将使用与索引 analyze_sample 相关联的默认索引分析器,对 “this is a test” 文本进行分析。也可以提供一个 analyzer 来使用与索引所关联不同的分析器:
GET /analyze_sample/_analyze{"analyzer" : "whitespace","text" : "this is a test"}
从字段映射导出分析器
分析器可以基于字段映射来派生,例如:
GET /analyze_sample/_analyze{"field" : "obj1.field1","text" : "this is a test"}
这将导致基于在 obj1.field1 映射中配置的分析器进行分析(如果没有,则为默认的索引分析器)。
规范化器
可以为与索引 analyze_sample 关联的规范化器的关键字字段提供一个 normalizer。
GET /analyze_sample/_analyze{"normalizer" : "my_normalizer","text" : "BaR"}
或者通过在标记筛选器和字符过滤器中构建自定义瞬态规范化器。
GET /_analyze{"filter" : ["lowercase"],"text" : "BaR"}
解释分析
如果你想获得更高级的细节,请将 explain设置为 true (默认为 false)。它会输出每个标记的所有标记属性。你可以通过设置选项 attributes 来过滤你想输出的标记属性。
?> 更多详情信息的格式在 Lucene 中被标记为实验性的,将来可能会改变。
GET /_analyze{"tokenizer" : "standard","filter" : ["snowball"],"text" : "detailed output","explain" : true,"attributes" : ["keyword"]}
"attributes" : ["keyword"]设置 “keyword” 为唯一输出的 “keyword” 属性
请求返回以下结果:
{"detail" : {"custom_analyzer" : true,"charfilters" : [ ],"tokenizer" : {"name" : "standard","tokens" : [ {"token" : "detailed","start_offset" : 0,"end_offset" : 8,"type" : "<ALPHANUM>","position" : 0}, {"token" : "output","start_offset" : 9,"end_offset" : 15,"type" : "<ALPHANUM>","position" : 1} ]},"tokenfilters" : [ {"name" : "snowball","tokens" : [ {"token" : "detail","start_offset" : 0,"end_offset" : 8,"type" : "<ALPHANUM>","position" : 0,"keyword" : false}, {"token" : "output","start_offset" : 9,"end_offset" : 15,"type" : "<ALPHANUM>","position" : 1,"keyword" : false} ]} ]}}
"keyword" : false由于在请求中指定了 “attributes”,只输出 “keyword” 属性。
设置标记限制
生成过多的标记可能会导致节点耗尽内存。下面的设置允许限制可以产生的标记的数量:
index.analyze.max_token_count
通过 _analyze API 可以产生的标记的最大数量。默认值为 10,000。如果生成的标记超出这个限制,会抛出错误。没有指定索引的 _analyze 端点将始终使用 10,000 作为限制。这个设置允许你控制一个特定索引的限制:
PUT /analyze_sample{"settings" : {"index.analyze.max_token_count" : 20000}}
GET /analyze_sample/_analyze{"text" : "this is a test"}
原文链接
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论