Elasticsearch分析


當在搜尋操作期間處理查詢時,任何索引中的內容由分析模組分析。該模組由分析器,分詞器,分詞器過濾器和字元過濾器組成。 如果沒有定義分析器,則預設情況下註冊內建的分析器,分詞器,分詞器過濾器和字元過濾器到分析模組。例如。

POST http://localhost:9200/pictures

請求正文

{
   "settings": {
      "analysis": {
         "analyzer": {
            "index_analyzer": {
               "tokenizer": "standard", "filter": [
                  "standard", "my_delimiter", "lowercase", "stop", 
                     "asciifolding", "porter_stem"
               ]
            },

            "search_analyzer": {
               "tokenizer": "standard", "filter": [
                  "standard", "lowercase", "stop", "asciifolding", "porter_stem"
               ]
            }
         },

         "filter": {
            "my_delimiter": {
               "type": "word_delimiter",
               "generate_word_parts": true,
               "catenate_words": true,
               "catenate_numbers": true,
               "catenate_all": true,
               "split_on_case_change": true,
               "preserve_original": true,
               "split_on_numerics": true,
               "stem_english_possessive": true
            }
         }
      }
   }
}

響應

{"acknowledged":true}

分析器

分析器由令牌器和可選的令牌過濾器組成。這些分析器在具有邏輯名的分析模組中註冊,可以在對映定義或某些API中參照它們。有許多預設分析儀如下 -

編號 分析器 描述
1 標準分析器(標準) 為此分析儀設定停止字詞和最大令牌長度。預設情況下,停用字詞列表為空,最大標記長度(max_token_length)為255。
2 簡單分析器(簡單) 這個分析器由小寫分詞器組成。
3 空白分析器(空格) 這個分析器由空白分詞器組成。
4 關鍵字分析器(關鍵字) 此分析器將整個流標記為單個令牌。 它可以用於郵政編碼。
5 模式分析器(模式) 該分析器主要處理正規表示式。可以在此分析器中設定像小寫字母,模式,標誌,無用詞的設定。
6 語言分析器 該分析器處理像印第安語,阿拉伯語,荷蘭語等語言。
7 雪球分析器(雪球) 此分析儀使用標準分段器,帶有標準濾波器,小寫字母過濾器,停止過濾器和雪球過濾器。
8 停止分析器(停止) stopwordsstopwords_path可以組態。 預設情況下,停用詞初始化為英語停用詞,stopwords_path包含具有停用詞的文字檔案的路徑。
9 自定義分析器(自定義) 此分析器用於建立帶有可選令牌過濾器和字元過濾器的令牌化器的客製化分析器。可以在此分析器中組態像tokenizerfilterchar_filterposition_increment_gap等設定。

令牌器/標記生成器

令牌器用於從Elasticsearch中的文字生成令牌。 通過考慮空白或其他標點符號,文字可以分解成令牌。 Elasticsearch有大量內建的分詞器,可以在自定義分析器中使用。

編號 標記生成器 描述
1 標準標記生成器(標準) 這是建立在基於語法的標記生成器,以及max_token_length可以組態為這個標記生成器。
2 邊緣NGram標記生成器(edgeNGram) 可以為此分詞器設定如:min_grammax_gramtoken_chars的設定。
3 關鍵字標記生成器(關鍵字) 這將生成整個輸入作為輸出,可以為此設定buffer_size
4 字母標記生成器 這將捕獲整個單詞,直到遇到一個非字母字元。
5 小寫標記生成器(小寫) 這與標記生成器相同,但是在建立令牌之後,會將它們更改為小寫。
6 NGram令牌器(nGram) 類似:min_gram(預設值為1),max_gram(預設值為2)和token_chars等設定可以為這個分詞器。
7 空格標記符(空格) 這將根據空格分隔文字。
8 模式分詞器(模式) 這使用正規表示式作為標記分隔符。可以為此分詞器設定模式,標誌和組設定。
9 UAX電子郵件URL令牌(uax_url_email) 這使用正規表示式作為標記分隔符。 可以為此分詞器設定模式,標誌和組設定。
10 這與標準分詞器工作方式相同,但它將電子郵件和URL作為單個標記。
11 路徑層次化標記分隔符(path_hierarchy) 此標記器生成輸入目錄路徑中存在的所有可能的路徑。可用於此分詞器的設定是分隔符(預設為/),replacementbuffer_size(預設為1024),reverse(預設為false)和skip(預設為0)。
12 經典分詞器(經典) 這在基於令牌的語法基礎上工作。可以為此分詞器設定:max_token_length
13 泰語分詞器(泰語) 此分詞器用於泰語,並使用內建的泰語分詞演算法。

令牌過濾器

令牌過濾器從令牌化器接收輸入,然後這些過濾器可以修改,刪除或新增輸入的文字。 Elasticsearch提供了大量內建的令牌過濾器。它們中的大多數已經在前面的部分中解釋。

字元過濾器

這些過濾器在分詞器之前處理文字。 字元過濾器查詢特殊字元或html標籤或指定的模式,然後刪除或更改為適當的詞,如’&‘到和,刪除html標記標記。 這裡是同義詞在synonym.txt中指定的分析器的範例 -

{
   "settings":{
      "index":{
         "analysis":{
            "analyzer":{
               "synonym":{
                  "tokenizer":"whitespace", "filter":["synonym"]
               }
            },

            "filter":{
               "synonym":{
                  "type":"synonym", "synonyms_path":"synonym.txt", "ignore_case":"true"
               }
            }
         }
      }
   }
}