分析 API
编辑分析 API编辑
对文本字符串执行 分析 并返回结果标记。
response = client.indices.analyze( body: { analyzer: 'standard', text: 'Quick Brown Foxes!' } ) puts response
GET /_analyze { "analyzer" : "standard", "text" : "Quick Brown Foxes!" }
路径参数编辑
-
<index>
-
(可选,字符串)用于派生分析器的索引。
如果指定,则
analyzer
或<field>
参数将覆盖此值。如果未指定分析器或字段,则分析 API 将使用索引的默认分析器。
如果未指定索引或索引没有默认分析器,则分析 API 将使用 标准分析器。
查询参数编辑
-
analyzer
-
(可选,字符串)应应用于提供的
text
的分析器的名称。这可以是 内置分析器,也可以是在索引中配置的分析器。如果未指定此参数,则分析 API 将使用字段映射中定义的分析器。
如果未指定字段,则分析 API 将使用索引的默认分析器。
如果未指定索引或索引没有默认分析器,则分析 API 将使用 标准分析器。
-
attributes
- (可选,字符串数组)用于过滤
explain
参数输出的标记属性数组。 -
char_filter
- (可选,字符串数组)用于在分词器之前预处理字符的字符过滤器数组。有关字符过滤器的列表,请参阅 字符过滤器参考。
-
explain
- (可选,布尔值)如果为
true
,则响应将包含标记属性和其他详细信息。默认为false
。 [预览] 其他详细信息的格式在 Lucene 中标记为实验性的,将来可能会更改。 -
field
-
(可选,字符串)用于派生分析器的字段。要使用此参数,您必须指定索引。
如果指定,则
analyzer
参数将覆盖此值。如果未指定字段,则分析 API 将使用索引的默认分析器。
如果未指定索引或索引没有默认分析器,则分析 API 将使用 标准分析器。
-
filter
- (可选,字符串数组)在分词器之后应用的标记过滤器数组。有关标记过滤器的列表,请参阅 标记过滤器参考。
-
normalizer
- (可选,字符串)用于将文本转换为单个标记的规范化器。有关规范化器的列表,请参阅 规范化器。
-
text
- (必填,字符串或字符串数组)要分析的文本。如果提供字符串数组,则将其作为多值字段进行分析。
-
tokenizer
- (可选,字符串)用于将文本转换为标记的分词器。有关分词器的列表,请参阅 分词器参考。
示例编辑
未指定索引编辑
您可以将任何内置分析器应用于文本字符串,而无需指定索引。
response = client.indices.analyze( body: { analyzer: 'standard', text: 'this is a test' } ) puts response
GET /_analyze { "analyzer" : "standard", "text" : "this is a test" }
文本字符串数组编辑
如果 text
参数作为字符串数组提供,则将其作为多值字段进行分析。
response = client.indices.analyze( body: { analyzer: 'standard', text: [ 'this is a test', 'the second text' ] } ) puts response
GET /_analyze { "analyzer" : "standard", "text" : ["this is a test", "the second text"] }
自定义分析器编辑
您可以使用分析 API 测试从分词器、标记过滤器和字符过滤器构建的自定义瞬态分析器。标记过滤器使用 filter
参数
response = client.indices.analyze( body: { tokenizer: 'keyword', filter: [ 'lowercase' ], text: 'this is a test' } ) puts response
GET /_analyze { "tokenizer" : "keyword", "filter" : ["lowercase"], "text" : "this is a test" }
response = client.indices.analyze( body: { tokenizer: 'keyword', filter: [ 'lowercase' ], char_filter: [ 'html_strip' ], text: 'this is a test</b>' } ) puts response
GET /_analyze { "tokenizer" : "keyword", "filter" : ["lowercase"], "char_filter" : ["html_strip"], "text" : "this is a <b>test</b>" }
可以在请求正文中指定自定义分词器、标记过滤器和字符过滤器,如下所示
response = client.indices.analyze( body: { tokenizer: 'whitespace', filter: [ 'lowercase', { type: 'stop', stopwords: [ 'a', 'is', 'this' ] } ], text: 'this is a test' } ) puts response
GET /_analyze { "tokenizer" : "whitespace", "filter" : ["lowercase", {"type": "stop", "stopwords": ["a", "is", "this"]}], "text" : "this is a test" }
特定索引编辑
您还可以针对特定索引运行分析 API
response = client.indices.analyze( index: 'analyze_sample', body: { text: 'this is a test' } ) puts response
GET /analyze_sample/_analyze { "text" : "this is a test" }
以上内容将使用与 analyze_sample
索引关联的默认索引分析器对“this is a test”文本运行分析。也可以提供 analyzer
来使用不同的分析器
response = client.indices.analyze( index: 'analyze_sample', body: { analyzer: 'whitespace', text: 'this is a test' } ) puts response
GET /analyze_sample/_analyze { "analyzer" : "whitespace", "text" : "this is a test" }
从字段映射派生分析器编辑
可以根据字段映射派生分析器,例如
response = client.indices.analyze( index: 'analyze_sample', body: { field: 'obj1.field1', text: 'this is a test' } ) puts response
GET /analyze_sample/_analyze { "field" : "obj1.field1", "text" : "this is a test" }
将根据 obj1.field1
的映射中配置的分析器(如果没有,则使用默认索引分析器)进行分析。
规范化器编辑
可以为与 analyze_sample
索引关联的关键字字段提供 normalizer
。
response = client.indices.analyze( index: 'analyze_sample', body: { normalizer: 'my_normalizer', text: 'BaR' } ) puts response
GET /analyze_sample/_analyze { "normalizer" : "my_normalizer", "text" : "BaR" }
或者通过从标记过滤器和字符过滤器构建自定义瞬态规范化器。
response = client.indices.analyze( body: { filter: [ 'lowercase' ], text: 'BaR' } ) puts response
GET /_analyze { "filter" : ["lowercase"], "text" : "BaR" }
解释分析编辑
如果要获取更多高级详细信息,请将 explain
设置为 true
(默认为 false
)。它将输出每个标记的所有标记属性。您可以通过设置 attributes
选项来过滤要输出的标记属性。
其他详细信息的格式在 Lucene 中标记为实验性的,将来可能会更改。
response = client.indices.analyze( body: { tokenizer: 'standard', filter: [ 'snowball' ], text: 'detailed output', explain: true, attributes: [ 'keyword' ] } ) puts response
GET /_analyze { "tokenizer" : "standard", "filter" : ["snowball"], "text" : "detailed output", "explain" : true, "attributes" : ["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 } ] } ] } }
设置标记限制编辑
生成过多的标记可能会导致节点内存不足。以下设置允许限制可以生成的标记数量
-
index.analyze.max_token_count
- 使用
_analyze
API 可以生成的最大标记数。默认值为10000
。如果生成的标记数量超过此限制,则会引发错误。未指定索引的_analyze
端点将始终使用10000
值作为限制。此设置允许您控制特定索引的限制
response = client.indices.create( index: 'analyze_sample', body: { settings: { 'index.analyze.max_token_count' => 20_000 } } ) puts response
PUT /analyze_sample { "settings" : { "index.analyze.max_token_count" : 20000 } }
response = client.indices.analyze( index: 'analyze_sample', body: { text: 'this is a test' } ) puts response
GET /analyze_sample/_analyze { "text" : "this is a test" }