&
轉化成and
Hello how are you?
會被ES預設的分詞器standard分成hello
、how
、are
、you
PUT mytest
{
"setting": {
"analysis": {
"char_filter": { 自定義的字符過濾器 },
"tokenizer": { 自定義的分詞器 },
"filter": { 自定義的token過濾器 },
"analyzer": { 自定義的分析器,可以將上面的char_filter、tokenizer、filter用不同的組合拼起來,形成不同的分析器 }
}
}
}
PUT mytest
{
"settings": {
"analysis": {
"char_filter": {
"&_to_and": {
"type": "mapping",
"mappings": ["&=> and "]
},
"xxx": {....},
"yyy": {....}
},
"filter": {
"my_stopwords": {
"type": "stop",
"stopwords": ["the", "a"]
}
},
"analyzer": {
//自定義分析器,將想要的char_filter、tokenizer、filter給加載進來
//數組順序很重要,因為是照順序執行,先執行htmp_strip,再執行&_to_and,然後才去執行tokenizer
"my_analyzer": {
"type": "custom",
"char_filter": ["htmp_strip", "&_to_and"],
"tokenizer": "standard",
"filter": ["lowercase", "my_stopwords"]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"nickname": {
"type": "text",
"analyzer": "my_analyzer" //使用自定義的分析器
}
}
}
}
}
分析器主要有兩種情況會被使用,一種是插入文檔時,將text類型的字段做分詞然後插入倒排索引,第二種就是在查詢時,先對要查詢的text類型的輸入做分詞,再去倒排索引搜索
如果想要讓 索引 和 查詢 時使用不同的分詞器,ElasticSearch也是能支持的,只需要在字段上加上search_analyzer
參數
analyzer
,有定義的話就用定義的,沒定義就用ES預設的search_analyzer
,如果沒有定義,就去看有沒有analyzer
,再沒有定義,才會去使用ES預設的具體實例
PUT mytest
{
"mappings": {
"doc": {
"properties": {
"nickname": {
"type": "text",
"analyzer": "standard", //索引時使用standard分詞器
"search_analyzer": "simple" //查詢時使用simple分詞器
},
"name": {
"type": "text",
"analyzer": "standard" //索引和查詢都使用standard分詞器
}
}
}
}
}