Opensearch / Elasticsearch 分词器可根据尾随状态缩写(正则表达式)进行拆分

问题描述 投票:0回答:1

我希望 Opensearch 对我的银行的个人项目交易信息进行标记,但我无法确定正确的语法。

以下是一些交易描述示例:

amazon web services    aws.amazon.coQA

TST* PLUS MEMBERSHIP THRITX

UBER EATS    HELP.UBER.COMCA

HUMBEBUNDLE.COM   HTTPSWWW.HUMBCA

APPLE.COM/BILL    866-712-7753 CA

我试图建立的第一个标记化规则是在尾随的 2 个字母是大写的状态缩写时将其分开:

GET /_analyze
{
    "tokenizer": {
        "type": "pattern",
        "pattern": "(?:[ A-Z]|^)(AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)$"
      },
  "text": "TST* PLUS MEMBERSHIP HTTPSWWW.THRITX"
}

然而,这似乎只是删除它,而不是分割它。

{
  "tokens": [
    {
      "token": "TST* PLUS MEMBERSHIP HTTPSWWW.THR",
      "start_offset": 0,
      "end_offset": 33,
      "type": "word",
      "position": 0
    }
  ]
}

当最后 2 个字母是状态缩写时,告诉 Opensearch 将它们视为自己的标记的正确方法是什么?

regex elasticsearch tokenize opensearch
1个回答
0
投票

在阅读了 lucene 中正则表达式语法的一些文档后,这似乎可以解决问题:

"(\\.*?)(?=[AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY]{2}\\z)|\\W"

我遇到的问题是我没有正确转义领先的“.”。

无论如何,对于这个爱好项目来说,opensearch 的选择太昂贵了,所以我可能不得不在 lambda 中这样做。

© www.soinside.com 2019 - 2024. All rights reserved.