對於es來說,有內置的分析器(Analyzer)和分詞器(Tokenizer)
1:分析器
ES內置分析器
standard | 分析器划分文本是通過詞語來界定的,由Unicode文本分割算法定義。它刪除大多數標點符號,將詞語轉換為小寫(就是按照空格進行分詞) |
---|---|
simple | 分析器每當遇到不是字母的字符時,將文本分割為詞語。它將所有詞語轉換為小寫。 |
keyword | 可以接受任何給定的文本,並輸出與單個詞語相同的文本 |
pattern | 分析器使用正則表達式將文本拆分為詞語,它支持小寫和停止字 |
language | 語言分析器 |
whitespace | (空白)分析器每當遇到任何空白字符時,都將文本划分為詞語。它不會將詞語轉換為小寫 |
custom | 自定義分析器 |
測試simple Analyzer:
POST _analyze
{
"analyzer": "simple",
"text": "today is 2018year 5month 1day."
}
custom(自定義)分析器接受以下的參數:
tokenizer |
內置或定制的標記器(也就是需要使用哪種分析器)。<br/>(需要) |
---|---|
char_filter |
內置或自定義字符過濾器的可選陣列。 |
filter |
可選的內置或定制token過濾器陣列。 |
position_increment_gap |
在索引文本值數組時,Elasticsearch會在一個詞的最后一個位置和下一個詞的第一個位置之間插入“間隙”,以確保短語查詢與不同數組元素的兩個術語不匹配。 默認為100.有關更多信息 |
測試:
PUT /my_index/groups/1
{
"names": [ "John Abraham", "Lincoln Smith"]
}
做一下普通查詢:
GET /my_index/groups/_search
{
"query": {
"match_phrase": {
"names": "Abraham Lincoln"
}
}
}
然后刪除索引,重新添加:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"names": {
"type": "text",
"position_increment_gap": 0
}
}
}
}
}
然后倒入數據:
PUT /my_index/groups/1
{
"names": [ "John Abraham", "Lincoln Smith"]
}
在做查詢操作:
GET /my_index/groups/_search
{
"query": {
"match_phrase": {
"names": "Abraham Lincoln"
}
}
}
2:更新分析器
1:要先關閉索引
2:添加分析器
3:打開索引
1、 關閉索引
POST my_index/_close
2、 添加分析器
PUT my_index/_settings
{
"analysis": {
"analyzer": {
"my_custom_analyzer3": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
3、打開索引
POST my_index/_open
4、測試:
POST my_index/_analyze
{
"analyzer": "my_custom_analyzer",
"text": "Is this <b>網頁 </b>?"
}
3:分詞器
Es中也支持非常多的分詞器
Standard | 默認的分詞器根據 Unicode 文本分割算法,以單詞邊界分割文本。它刪除大多數標點符號。<br/>它是大多數語言的最佳選擇 |
---|---|
Letter | 遇到非字母時分割文本 |
Lowercase | 類似 letter ,遇到非字母時分割文本,同時會將所有分割后的詞元轉為小寫 |
Whitespace | 遇到空白字符時分割位文本 |
Standard例子:
POST _analyze
{
"tokenizer": "standard",
"text": "this is standard tokenizer!!!!."
}
Letter例子:
POST _analyze
{
"tokenizer": "letter",
"text": "today is 2018year-05month"
}
Whitespace例子:
POST _analyze
{
"tokenizer": "whitespace",
"text": "this is t es t."
}
4:更新分詞器
我們在創建索引之后可以添加分詞器,比如想要按照空格的方式進行分詞
【注意】
添加分詞器步驟:
1:要先關閉索引
2:添加分詞器
3:打開索引
POST school/_close
PUT school/_settings
{
"analysis" :
{
"analyzer" :
{
"content" : {"type" : "custom" , "tokenizer" : "whitespace"}
}
}
}
POST school/_open
獲取索引的配置:
索引中包含了非常多的配置參數,我們可以通過命令進行查詢
GET school/_settings