我正在寻找一种方法,将字段的最后一个单词(或者更一般地说:最后一个标记)索引到一个单独的子字段中。我已经研究了 predicate 脚本令牌过滤器,但在该上下文中,无痛脚本api只提供了toekn从原始输入字符串开始的绝对位置,因此我可以找到第一个令牌,如下所示:
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [
{
"type": "predicate_token_filter",
"script": {
"source": """
token.position == 0
"""
}
}
],
"text": "the fox jumps the lazy dog"
}
这样做的结果是:
{
"tokens" : [
{
"token" : "the",
"start_offset" : 0,
"end_offset" : 3,
"type" : "<ALPHANUM>",
"position" : 0
}
]
}
但我需要最后一个标记,而不是第一个。在elasticsearch之外,是否有任何方法可以在不准备单独字段预索引的情况下实现这一点?
1条答案
按热度按时间xpcnnkqh1#
你在正确的道路上!!解决办法与你所拥有的并不遥远。。。当你知道你可以很容易地得到第一个令牌,但你需要的是最后一个。。。把绳子倒过来。。。
下面的分析器将只输出您需要的令牌,即。
dog
. 我们首先反转整个字符串,然后按标记拆分,使用 predicate 脚本仅选择第一个字符串,然后再次反转该标记。瞧à!结果: