我想在elasticsearch中指定每場分析器。對於一些字段我需要的關鍵字分析儀,而對於一個我需要自定義數字分析器,將刪除所有的非數字字符(見number_analyzer
在下面的代碼)彈性搜索分析器
創建該索引是
{
"settings": {
"analysis" : {
"analyzer" : {
"number_analyzer" : {
"type": "custom",
"tokenizer": "keyword",
"filter": ["lowercase"],
"char_filter": ["number_filter"]
}
},
"char_filter" : {
"number_filter" : {
"type": "pattern_replace",
"pattern": "[\\d]+",
"replacement": ""
}
}
}
}
}
請求
爲字段的映射是
{
"properties": {
"field1": {
"type": "string",
"store": "yes",
"index": "analyzed",
"analyzer": "number_analyzer"
},
"field2": {
"type": "string",
"store": "yes",
"index": "not_analyzed",
"analyzer": "keyword"
},
"field3": {
"type": "string",
"store": "true",
"index": "not_analyzed"
},
"field4": {
"type": "string",
"store": "yes",
"index": "analyzed"
},
"field5": {
"type": "string",
"store": "yes",
"index": "analyzed",
"analyzer": "number_analyzer"
}
}
}
當我在索引
{
"field1" : "464533AB",
"field2" : "Euro",
"field3" : "THIS IS A TITLE",
"field4": "DEED_TYPE",
"field5":"TEST3"
}
插入以下文件3210
我注意到字段1中的字符沒有被刪除(我的目標是隻保留464533
),並且我能夠得到結果的查詢field4:DEED_TYPE
,雖然我不應該(我認爲標準分析器將刪除特殊字符和小寫字母,所以我期望field4:DEED_TYPE
只能與關鍵字分析器一起使用)。
在上面的代碼中指定分析器的方式是否有任何錯誤?