vi_tokenizer Không dữ lại token gốc khi config filter preserve_original = true
phikll12 opened this issue · 3 comments
phikll12 commented
vi_tokenizer Không dữ lại token gốc khi config filter preserve_original = true
duydo commented
@phikll12 Em setting cho index cụ thể thế nào em cho lên đây luôn để anh tiện reproduce lại và fix nếu có issue nhé.
phikll12 commented
PUT my-index-000001
{
"settings": {
"index": {
"analysis": {
"filter": {
"custom_asciifolding":{
"type":"asciifolding",
"preserve_original": true
},
"custom_lowercase":{
"type":"lowercase",
"preserve_original": true
}
},
"analyzer": {
"my_analyzer": {
"filter": [
"custom_lowercase",
"custom_asciifolding"
],
"tokenizer": "vi_tokenizer"
}
}
}
}
}
}
@duydo Đây là setting index của em.
Sau khi em analyzer
{
"tokens" : [
{
"token" : "mua",
"start_offset" : 0,
"end_offset" : 3,
"type" : "<PHRASE>",
"position" : 0
},
{
"token" : "dien thoai",
"start_offset" : 4,
"end_offset" : 14,
"type" : "<PHRASE>",
"position" : 1
},
{
"token" : "điện thoại",
"start_offset" : 4,
"end_offset" : 14,
"type" : "<PHRASE>",
"position" : 1
}
]
}
Làm sao để giữ được Token củ ạ ví dụ :
{
"tokens" : [
{
"token" : "mua dien thoai",
"start_offset" : 0,
"end_offset" : 14,
"type" : "<PHRASE>",
"position" : 0
}
{
"token" : "mua",
"start_offset" : 0,
"end_offset" : 3,
"type" : "<PHRASE>",
"position" : 0
},
{
"token" : "dien thoai",
"start_offset" : 4,
"end_offset" : 14,
"type" : "<PHRASE>",
"position" : 1
},
{
"token" : "điện thoại",
"start_offset" : 4,
"end_offset" : 14,
"type" : "<PHRASE>",
"position" : 1
}
]
}
Em cám ơn.
duydo commented
@phikll12 Các filters chỉ apply trên tokens đã được tokenized. Nếu em muốn giữ nguyên input source thì em có thể define multi fields, ví dụ:
"name": {
"type": "text",
"analyzer": "my_analyzer",
"fields": {
"raw": { "type": "keyword"}
}
}
Lúc này
name.raw = 'mua dien thoai'
name = [mua, dien thoai, điện thoại]