首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Elasticsearch中将标记存储到文档的数据字段?

如何在Elasticsearch中将标记存储到文档的数据字段?
EN

Stack Overflow用户
提问于 2017-07-18 01:32:29
回答 1查看 212关注 0票数 0

我一直在寻找一种方法来将由shingle令牌过滤器创建的令牌附加到字段数据中,因为它正在被解析为Logstash。到目前为止,我找到的所有文档都主要讨论如何使用shingle令牌过滤器来使用REST来分析已经记录和索引的数据的文本,但在数据字段值被索引时,我还没有找到将这些文本附加到数据字段值的方法。

简而言之,我想要强调的是:假设我收到了一条信息

STORE THE SHINGLES

应用一个最大和最小板条大小为2的板条过滤器,我们得到了令牌:

STORE THETHE SHINGLES

我想找到一种将消息解析为Logstash的方法,以便将其索引如下:

代码语言:javascript
复制
{
    ...
    "message": "STORE THE SHINGLES",
    "shingle_2": ["STORE THE", "THE SHINGLES"],
    ...
}

如果这是不可能的,那么我希望是否有一种方法将这些带状数据附加到已经记录和索引的数据中,如下所示:

代码语言:javascript
复制
{
    ...
    "message": "STORE THE SHINGLES",
    ...
}

...into这个:

代码语言:javascript
复制
{
    ...
    "message": "STORE THE SHINGLES",
    "shingle_2": ["STORE THE", "THE SHINGLES"],
    ...
}

提前感谢您的帮助或建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 04:49:47

首先,分析过程发生在索引文档的那一刻,因此Logstash不可能知道其中的任何一个。

第二件事是,您要发送给的源文档将永远不会被ES以任何方式修改,不管您配置了什么分析过程。

在我看来,您唯一的选择是使用 API字段的内容访问message,解析响应并修改源文档,然后再将其索引到ES中。

例如,假设您的文档如下:

代码语言:javascript
复制
{
    ...
    "message": "STORE THE SHINGLES",
    ...
}

首先,你把这叫做

代码语言:javascript
复制
POST _analyze
{
  "analyzer" : "your_shingle_analyzer",
  "text" : "STORE THE SHINGLES"
}

你会得到以下的回应:

代码语言:javascript
复制
{
  "tokens" : [ {
    "token" : "STORE THE",
    "start_offset" : 0,
    "end_offset" : 9,
    "type" : "<ALPHANUM>",
    "position" : 0
  }, {
    "token" : "THE SHINGLE",
    "start_offset" : 10,
    "end_offset" : 21,
    "type" : "<ALPHANUM>",
    "position" : 1
  } ]
}

减少对["STORE THE", "THE SHINGLES"]的上述响应很容易,然后可以将其附加到文档中并将其发送给ES:

代码语言:javascript
复制
PUT your_index/your_type/1234
{
    ...
    "message": "STORE THE SHINGLES",
    "shingle_2": ["STORE THE", "THE SHINGLES"],
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45156052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档