Elasticsearch 分析

當在搜索操作期間處理查詢時,分析模塊會分析任何索引中的內(nèi)容。該模塊由分析器,令牌生成器,令牌過濾器和字符過濾器組成。如果未定義分析器,則默認情況下,內(nèi)置分析器,令牌,過濾器和令牌生成器會在分析模塊中注冊。

在下面的示例中,我們使用一個標準分析器,該分析器在沒有指定其他分析器時使用。它將根據(jù)語法對句子進行分析,并生成句子中使用的單詞。

POST _analyze
{
   "analyzer": "standard",
   "text": "Today's weather is beautiful"
}

運行上面的代碼后,我們得到如下所示的響應:

{
   "tokens" : [
      {
         "token" : "today's",
         "start_offset" : 0,
         "end_offset" : 7,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "weather",
         "start_offset" : 8,
         "end_offset" : 15,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "is",
         "start_offset" : 16,
         "end_offset" : 18,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 19,
         "end_offset" : 28,
         "type" : "",
         "position" : 3
      }
   ]
}

配置標準分析器

我們可以使用各種參數(shù)配置標準分析器,以獲取我們的自定義要求。

在以下示例中,我們將標準分析器配置為max_token_length為5。

為此,我們首先使用具有max_length_token參數(shù)的分析器創(chuàng)建索引。

PUT index_4_analysis
{
   "settings": {
      "analysis": {
         "analyzer": {
            "my_english_analyzer": {
               "type": "standard",
               "max_token_length": 5,
               "stopwords": "_english_"
            }
         }
      }
   }
}

接下來,我們用如下所示的文本應用分析器。請注意令牌是如何不顯示的,因為它在開頭有兩個空格,在結(jié)尾有兩個空格。對于“ is”這個詞,它的開頭有一個空格,結(jié)尾有一個空格。把它們?nèi)咳〕鰜?,就變成?個帶空格的字母,這并不意味著它就是一個單詞。至少在開頭或結(jié)尾應該有一個非空格字符,使它成為一個要計數(shù)的單詞。

POST index_4_analysis/_analyze
{
   "analyzer": "my_english_analyzer",
   "text": "Today's weather is beautiful"
}

運行上面的代碼后,我們得到如下所示的響應:

{
   "tokens" : [
      {
         "token" : "today",
         "start_offset" : 0,
         "end_offset" : 5,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "s",
         "start_offset" : 6,
         "end_offset" : 7,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "weath",
         "start_offset" : 8,
         "end_offset" : 13,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "er",
         "start_offset" : 13,
         "end_offset" : 15,
         "type" : "",
         "position" : 3
      },
      {
         "token" : "beaut",
         "start_offset" : 19,
         "end_offset" : 24,
         "type" : "",
         "position" : 5
      },
      {
         "token" : "iful",
         "start_offset" : 24,
         "end_offset" : 28,
         "type" : "",
         "position" : 6
      }
   ]
}

下表列出了各種分析儀的列表及其說明-

序號分析器和說明
1

標準分析器(standard)

stopwords和max_token_length設置可以為這個分析器設置。默認情況下,stopwords列表為空,max_token_length為255。

2

簡單分析器(simple)

該分析器由小寫的 tokenizer 組成。

3

空白分析器 (whitespace)

該分析器由空格標記器組成

4

停止分析器 (stop)

可以配置stopwords和stopwords_path。默認情況下,stopwords初始化為英文停止詞,stopwords_path包含包含停止詞的文本文件的路徑

分詞器

令牌生成器用于從Elasticsearch中的文本生成令牌。通過將空格或其他標點符號考慮在內(nèi),可以將文本分解為標記。Elasticsearch有很多內(nèi)置的標記器,可以在自定義分析器中使用。

下面顯示了一個分詞器的示例,該分詞器在遇到非字母的字符時將文本分解為多個詞,但也會將所有詞都小寫,如下所示-

POST _analyze
{
   "tokenizer": "lowercase",
   "text": "It Was a Beautiful Weather 5 Days ago."
}

運行上面的代碼后,我們得到如下所示的響應:

{
   "tokens" : [
      {
         "token" : "it",
         "start_offset" : 0,
         "end_offset" : 2,
         "type" : "word",
         "position" : 0
      },
      {
         "token" : "was",
         "start_offset" : 3,
         "end_offset" : 6,
         "type" : "word",
         "position" : 1
      },
      {
         "token" : "a",
         "start_offset" : 7,
         "end_offset" : 8,
         "type" : "word",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 9,
         "end_offset" : 18,
         "type" : "word",
         "position" : 3
      },
      {
         "token" : "weather",
         "start_offset" : 19,
         "end_offset" : 26,
         "type" : "word",
         "position" : 4
      },
      {
         "token" : "days",
         "start_offset" : 29,
         "end_offset" : 33,
         "type" : "word",
         "position" : 5
      },
      {
         "token" : "ago",
         "start_offset" : 34,
         "end_offset" : 37,
         "type" : "word",
         "position" : 6
      }
   ]
}

令牌生成器的列表及其說明如下表所示:

序號分詞器和說明
1

標準標記器 (standard)

這是基于基于語法的標記器構(gòu)建的,max_token_length可以為這個標記器配置。

2

邊緣 NGram 標記器(edgeNGram)

像min_gram, max_gram, token_chars這樣的設置可以為這個標記器設置。

3

關鍵字標記器 (keyword)

這將生成整個輸入作為輸出,buffer_size可以為此設置。

4

字母標記器(letter)

這將捕獲整個單詞,直到遇到一個非字母。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清