我一直在寻找一种方法来将由shingle令牌过滤器创建的令牌附加到字段数据中,因为它正在被解析为Logstash。到目前为止,我找到的所有文档都主要讨论如何使用shingle令牌过滤器来使用REST来分析已经记录和索引的数据的文本,但在数据字段值被索引时,我还没有找到将这些文本附加到数据字段值的方法。
简而言之,我想要强调的是:假设我收到了一条信息
STORE THE SHINGLES。
应用一个最大和最小板条大小为2的板条过滤器,我们得到了令牌:
STORE THE和THE SHINGLES。
我想找到一种将消息解析为Logstash的方法,以便将其索引如下:
{
...
"message": "STORE THE SHINGLES",
"shingle_2": ["STORE THE", "THE SHINGLES"],
...
}如果这是不可能的,那么我希望是否有一种方法将这些带状数据附加到已经记录和索引的数据中,如下所示:
{
...
"message": "STORE THE SHINGLES",
...
}...into这个:
{
...
"message": "STORE THE SHINGLES",
"shingle_2": ["STORE THE", "THE SHINGLES"],
...
}提前感谢您的帮助或建议!
发布于 2017-07-18 04:49:47
首先,分析过程发生在索引文档的那一刻,因此Logstash不可能知道其中的任何一个。
第二件事是,您要发送给的源文档将永远不会被ES以任何方式修改,不管您配置了什么分析过程。
在我看来,您唯一的选择是使用 API字段的内容访问message,解析响应并修改源文档,然后再将其索引到ES中。
例如,假设您的文档如下:
{
...
"message": "STORE THE SHINGLES",
...
}首先,你把这叫做
POST _analyze
{
"analyzer" : "your_shingle_analyzer",
"text" : "STORE THE SHINGLES"
}你会得到以下的回应:
{
"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:
PUT your_index/your_type/1234
{
...
"message": "STORE THE SHINGLES",
"shingle_2": ["STORE THE", "THE SHINGLES"],
...
}https://stackoverflow.com/questions/45156052
复制相似问题