避免词干缩略词?

Avoid stemming of Acronyms?

我正在使用 pattern_capture 过滤器来保留所有首字母缩略词

PUT test_index/_settings
{
  "index.analysis.filter": {
    "acronym_en_EN": {
      "type": "pattern_capture",
      "patterns": [
        "(?:[a-zA-Z]\.)+", 
        "((?:[a-zA-Z]\.)+[a-zA-Z])",
        "((?:[a-zA-Z]\.)+[s]$)",
        "((?:[a-zA-Z]\.)+[s][\.]$)"
        ],
      "preserve_original": true
    }
  }
}

但我注意到以 ss. 结尾的首字母缩略词会被词干化,因为分析器还附加了一个词干过滤器。上面过滤器中用于处理 s 的正则表达式也不起作用。

我用这个测试输出

GET test_index/_analyze?tokenizer=standard&filters=lowercase,acronym_en_EN,apostrophe,porter_stemmer_en_EN&text=u.s.a. u.s. s.w.a.t u.t. 

这给了我

{
   "tokens": [
      {
         "token": "u.s.a",
         "start_offset": 0,
         "end_offset": 5,
         "type": "<ALPHANUM>",
         "position": 1
      },
      {
         "token": "u.",
         "start_offset": 7,
         "end_offset": 10,
         "type": "<ALPHANUM>",
         "position": 2
      },
      {
         "token": "u.",
         "start_offset": 7,
         "end_offset": 10,
         "type": "<ALPHANUM>",
         "position": 2
      },
      {
         "token": "s.w.a.t",
         "start_offset": 12,
         "end_offset": 19,
         "type": "<ALPHANUM>",
         "position": 3
      },
      {
         "token": "u.t",
         "start_offset": 20,
         "end_offset": 23,
         "type": "<ALPHANUM>",
         "position": 4
      }
   ]
}

有什么方法可以保留以 s 结尾的首字母缩略词,这样对于 u.s.u.s 我就不会得到 u. 了吗?

我不认为这是开箱即用的支持。我相信这样做的方法是教 pattern_capture 过滤器如何将其捕获标记为 keyword 标记 ala keyword_marker 过滤器。

老实说,您可能可以通过两个 pattern_replace 标记过滤器来破解一些东西 - 一个在词干分析器的两侧。只需在首字母缩略词的前面打一个 $ 或其他东西,然后在另一边撕掉它。