天天看點

elasticsearch 多字段特性及Mapping中配置自定義Analyzer可以通過_analyze對于文本的分詞結果進行測試正規表達式建立一個自定義的分詞器

多字段特性及Mapping中配置自定義Analyzer

PUT logs/_doc/1

{“level”:“DEBUG”}

我們在建立索引的時候,可以建立多字段類型,通過多字段類型可以進行一些精确比對,也可以使用不同的analyzer分詞

GET /logs/_mapping

exact values(keyword) 精确值 full text(text) 全文檢索 exact values 就是不需要進行分詞

character filters 特性過濾(當分詞後設定特定 的過濾方式)

tokenizer 分詞器

position 位置 offset 偏移量

token filters 過濾器(設定一下停用詞,大小寫轉換,近義詞等)

可以通過_analyze對于文本的分詞結果進行測試

指定tokenizer為keyword char_filter 為html_strip 則表示,按照keyword進行分詞,也就是不做什麼處理,将測試的值當成一個詞整體 原樣輸出 并去除标簽

POST _analyze
{
  "tokenizer": "keyword",
  "char_filter": ["html_strip"],
  "text": "<b>hello world</b>"
}
           

将詞作為檔案路徑進行分詞

POST _analyze

{

“tokenizer”:“path_hierarchy”,

“text”:"/user/raven/a/b/c/d/e"

}

也可以使用char_filter 進行一些特定的替換過濾

使用 standard進行分詞 設定了特定的character filters 将- 替換為了_

POST _analyze
{
  "tokenizer" : "standard",
  "char_filter" : [
    {
      "type" : "mapping",
      "mappings" : ["- => _"]
    }
  ],
  "text": "123-456, I-test! test-990 650-555-1234"
}
           

white space and snowball 使用空格進行分詞,并且将一些沒有意義的詞進行剔除停用 通過snowball将詞還原為最初的樣子

GET _analyze
{
  "tokenizer": "whitespace",
  "filter": ["stop","snowball"],
  "text": ["The gilrs in China are playing this game!"]
}

GET _analyze
{
  "tokenizer": "whitespace",
  "filter": ["stop","snowball"],
  "text": ["The rain in Spain falls mainly on the plain."]
}
           

lowercase 将詞轉為小寫,又因為存在stop 是以the會被剔除

GET _analyze
{
  "tokenizer": "whitespace",
  "filter": ["lowercase","stop","snowball"],
  "text": ["The gilrs in China are playing this game!"]
}
           

正規表達式

GET _analyze
{
  "tokenizer": "standard",
  "char_filter": [
    {
      "type": "pattern_replace",
      "pattern": "http://(.*)",
      "replacement": "$1"
    }
  ],
  "text": "http://www.elastic.co"
}
           

建立一個自定義的分詞器

建立一個自定義的分詞器,通過settings進行設定,取名為my_custom_analyzer 指定他擁有一個特定的分詞過濾方式,指定他有一個特點的分詞器,指定他有特定的過濾器 自定義的分詞器中指定他使用ik分詞器,自定義的特性過濾器中取出了标簽,自定義的過濾器中,過濾了英語中的無效詞

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "char_filter":"my_charfilter",
          "tokenizer": "my_tokenizer",
          "filter": [
            "lowercase",
            "my_stop"
          ]
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "ik_smart"
        }
      },
      "char_filter": {
        "my_charfilter":{
          "type": "html_strip"
        }
      },  
      "filter": {
        "my_stop": {
          "type": "stop",
          "stopwords": "_english"
        }
      }
    }
  }
}
           

測試自定義的分詞器 他去除了标簽和 英語中的輔助詞。并且按照ik分詞器的細粒度分詞,進行了分詞。

POST my_index/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text": "我在北京天安門看<a>天空</a> is very happy ,and you?"
}
           
elasticsearch 多字段特性及Mapping中配置自定義Analyzer可以通過_analyze對于文本的分詞結果進行測試正規表達式建立一個自定義的分詞器
elasticsearch 多字段特性及Mapping中配置自定義Analyzer可以通過_analyze對于文本的分詞結果進行測試正規表達式建立一個自定義的分詞器
elasticsearch 多字段特性及Mapping中配置自定義Analyzer可以通過_analyze對于文本的分詞結果進行測試正規表達式建立一個自定義的分詞器
elasticsearch 多字段特性及Mapping中配置自定義Analyzer可以通過_analyze對于文本的分詞結果進行測試正規表達式建立一個自定義的分詞器
elasticsearch 多字段特性及Mapping中配置自定義Analyzer可以通過_analyze對于文本的分詞結果進行測試正規表達式建立一個自定義的分詞器