Tokenzier Filter 可以从 Tokenizer 接收 token stream,并且可以修改 token(如小写化),删除 token(如去除stopwords),添加 token(如同义词);

1. Apostrophe token filter

  • apostrophe 可以将撇号后面的内容全部去掉,包括撇号本身; ```json GET /_analyze { “tokenizer” : “standard”, “filter” : [“apostrophe”], “text” : “Istanbul’a veya Istanbul’dan” }

    token stream:[Istanbul’a, veya, Istanbul’dan]

    结果:[ Istanbul, veya, Istanbul ]

自定义 Analyzer

PUT /apostrophe_example { “settings” : { “analysis” : { “analyzer” : { “standard_apostrophe” : { “tokenizer” : “standard”, “filter” : [“apostrophe”] } } } } }

  1. <a name="wyRxL"></a>
  2. # 2. ASCII folding token filter
  3. - **asciifolding**,将不在 Basic Latin Unicode(前127个 ASCII 字符)中的字母、数字和符号字符转换为其等效的ASCII(如果存在)。例如,过滤器将 à 更改为 a。
  4. - **可选参数:**
  5. | **参数** | **参数说明** |
  6. | :---: | :---: |
  7. | preserve_original | (可选,布尔值)如果为true,则同时发出原始token和处理后的token。默认为false。 |
  8. ```json
  9. PUT /asciifold_example
  10. {
  11. "settings" : {
  12. "analysis" : {
  13. "analyzer" : {
  14. "standard_asciifolding" : {
  15. "tokenizer" : "standard",
  16. "filter" : ["my_ascii_folding"]
  17. }
  18. },
  19. "filter" : {
  20. "my_ascii_folding" : {
  21. "type" : "asciifolding",
  22. "preserve_original" : true
  23. }
  24. }
  25. }
  26. }
  27. }
  28. #测试
  29. GET asciifold_example/_analyze
  30. {
  31. "analyzer": "standard_asciifolding",
  32. "text" : "açaí à la carte"
  33. }
  34. #结果:[ acai, açaí, a, à, la, carte ]

3. CJK bigram token filter

  • cjk_bigram,适用于 CJK(中文、日语和韩语)token,在内置的 CJK analyzer 中被使用;
  • 可选参数: | 参数 | 参数说明 | | :—-: | :—-: | | ignored_scripts | (可选,字符数组)要禁用bigram的字符串数组。可能值:
    han(汉)
    hangul(朝鲜文)
    hiragana(平假名)
    katakana(片假名)
    所有非CJK的字符单词都不做修改处理; | | output_unigrams | (可选,boolean)如果为true,则以bigram和unigram形式发出token。如果为false,则当没有相邻字符时,将以unigram形式输出CJK字符。默认为false。 |
PUT /cjk_bigram_example
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "han_bigrams" : {
                    "tokenizer" : "standard",
                    "filter" : ["han_bigrams_filter"]
                }
            },
            "filter" : {
                "han_bigrams_filter" : {
                    "type" : "cjk_bigram",
                    "ignored_scripts": [
                        "hangul",
                        "hiragana",
                        "katakana"
                    ],
                    "output_unigrams" : false
                }
            }
        }
    }
}

GET cjk_bigram_example/_analyze
{
  "analyzer": "han_bigrams",
  "text" : "東京都は、日本の首都であり"
}
#结果:[ 東京, 京都, は, 日本, の, 首都, で, あ, り ]
#仅仅 standard + cjk_bigram:[ 東京, 京都, 都は, 日本, 本の, の首, 首都, 都で, であ, あり ]