第09篇-Elasticsearch中構建自定義分析器

個人Elasticsearch系列文章,逐漸更新中,歡迎關注
0A.關於Elasticsearch及實例應用
00.Solr與ElasticSearch對比
01.ElasticSearch能作什麼?
02.Elastic Stack功能介紹
03.如何安裝與設置Elasticsearch API
04.若是經過elasticsearch的head插件創建索引_CRUD操做
05.Elasticsearch多個實例和head plugin使用介紹
06.當Elasticsearch進行文檔索引時,它是如何工做的?
07.Elasticsearch中的映射方式—簡潔版教程
08.Elasticsearch中的分析和分析器應用方式
09.Elasticsearch中構建自定義分析器
10.Kibana科普-做爲Elasticsearhc開發工具html

另外Elasticsearch入門,我強烈推薦Elasticsearch基礎入門教程給你,很是想盡的入門指南手冊。segmentfault

介紹
在此階段的上一篇博客中,我已經解釋了有關常規分析器結構和組件的更多信息。我也解釋了每一個組件的功能。在此博客中,咱們將經過構建自定義分析器,而後查詢並查看差別來了解實現方面。
定製分析儀的外殼
所以,讓咱們考慮定製分析儀的狀況。假設咱們輸入到Elasticsearch的文本包含如下內容app

  1. html標籤

html標籤在索引時可能會出如今咱們的文本中,其實這在大多數狀況下是不須要的。因此咱們須要刪除這些。
2.中止詞
像the,and,or等這樣的詞,在搜索內容時意義不大,通常被稱爲中止詞。
3.大寫字母。
4.簡寫形式如H2O、$、%
在某些狀況下,像這樣的簡式應該用英文原詞代替。curl

應用自定義分析器
在上面的示例文本中,下表列出了須要執行的操做以及自定義分析器的相應組件elasticsearch

Arun has 100 $ which accounts to 3 % of the total <h2> money </h2>

「 settings」中的層次結構以下所示:工具

0001.png

應用全部組件
如今應用上述全部組件建立一個自定義分析器,以下所示:開發工具

curl -XPUT localhost:9200/testindex_0204 -d '{
  "settings": {
    "analysis": {
      "char_filter": {
        "subsitute": {
          "type": "mapping",
          "mappings": [
            "$=> dollar",
            "%=> percentage"
          ]
        },
        "html-strip": {
          "type": "html_strip"
        }
      },
      "tokenizer": "standard",
      "filter": {
        "stopwords_removal": {
          "type": "stop",
          "stopwords": [
            "has",
            "which",
            "to",
            "of",
            "the"
          ]
        }
      },
      "analyzer": {
        "custom_analyzer_type_01": {
          "type": "custom",
          "char_filter": [
            "subsitute",
            "html_strip"
          ],
          "tokenizer": "standard",
          "filter": [
            "stopwords_removal",
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "test_type": {
      "properties": {
        "text": {
          "type": "string",
          "analyzer": "custom_analyzer_type_01"
        }
      }
    }
  }
}'

這將使用名爲「 custom_analyzer_01」 的自定義分析器建立索引。
詳細說明了此映射,下圖說明了每一個部分:
0003.png
使用自定義分析器生成令牌
使用分析器能夠看到使用此分析器生成的令牌,以下所示:url

curl -XGET "localhost:9200/testindex_0204/_analyze?analyzer=custom_analyzer_type_01&pretty=true" -d 'Arun has 100 $ which accounts to 3 % of the total <h2> money </h2>'

令牌列表以下:
0004.png
在這裏您能夠進行一些觀察:
令牌號3和6最初是$ 和%,但隨後如本節中所指定的那樣被替換爲「 dollar」和「 percentage」 char_filter 。
還有html標記<h2> ,</h2>也被html_strip 過濾器從令牌列表中刪除
過濾器 "to","the","which","has"中提到的術語等stopwords 已從令牌列表中刪除。令牌編號1最初看起來應該像是「 Arun」,但已被應用的過濾器小寫。spa

結論
在此博客中,咱們看到了如何構建自定義分析器並將其應用於Elasticsearch中的字段。經過這個博客,我打算結束博客系列的第二階段(索引,映射和分析)。從如今開始,此階段是理解Elasticsearch的基礎部分之一,咱們可能會將此階段的輸入用於許多目的。從階段03開始,我將向您介紹elasticsearch的查詢DSL世界。插件

相關文章
相關標籤/搜索