我希望 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 将它们视为自己的标记的正确方法是什么?
在阅读了 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 中这样做。