如何检查在Elasticsearch中为不同的标记生成器生成的标记

use*_*257 3 elasticsearch

我一直在使用不同类型的标记器进行测试和演示.我需要检查如何使用不同的标记化器对特定文本字段进行标记,并查看生成的标记.

我怎样才能做到这一点?

Val*_*Val 5

您可以将_analyze端点用于此目的.

例如,使用标准分析仪,您可以this is a test像这样分析

curl -XGET 'localhost:9200/_analyze?analyzer=standard&pretty' -d 'this is a test'
Run Code Online (Sandbox Code Playgroud)

这会产生以下令牌:

{
  "tokens" : [ {
    "token" : "this",
    "start_offset" : 0,
    "end_offset" : 4,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "is",
    "start_offset" : 5,
    "end_offset" : 7,
    "type" : "<ALPHANUM>",
    "position" : 2
  }, {
    "token" : "a",
    "start_offset" : 8,
    "end_offset" : 9,
    "type" : "<ALPHANUM>",
    "position" : 3
  }, {
    "token" : "test",
    "start_offset" : 10,
    "end_offset" : 14,
    "type" : "<ALPHANUM>",
    "position" : 4
  } ]
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用任何现有分析器,也可以使用tokenizer参数指定标记器,使用token_filters参数的标记过滤器和使用参数的字符过滤器char_filters.例如,curl -XGET 'localhost:9200/_analyze?tokenizer=keyword&token_filters=lowercase&char_filters=html_strip' -d 'THIS is a <b>TEST</b>'使用标准分析器,keyword标记生成器,lowercase令牌过滤器和html_strip字符过滤器分析HTML会产生这种情况,即没有HTML标记的小写单个标记:

curl -XGET 'localhost:9200/_analyze?tokenizer=keyword&token_filters=lowercase&char_filters=html_strip' -d 'THIS is a <b>TEST</b>'

{
  "tokens" : [ {
    "token" : "this is a test",
    "start_offset" : 0,
    "end_offset" : 21,
    "type" : "word",
    "position" : 1
  } ]
}
Run Code Online (Sandbox Code Playgroud)


Vin*_*han 3

除了 @Val 提到的之外,如果您打算研究标记化器的工作,您可以尝试术语向量。您可以尝试类似的方法来检查某个领域中发生的标记

GET /index-name/type-name/doc-id/_termvector?fields=field-to-be-examined
Run Code Online (Sandbox Code Playgroud)

要了解有关标记器及其操作的更多信息,您可以参考此博客