ElasticSearch edge-ngram и шаблонный фильтр
У меня есть заголовок, такой как SimpleDoc000155/1 (количество символов не фиксировано, но за ним всегда следуют 9 цифр и / и номеров), я хотел бы знать, как я могу проанализировать эти поля, чтобы получить результаты: 155 и SimpleDoc000155.
Elasticsearch версии 2.2
Моя текущая настройка:
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "autocomplete",
"filter" : [ "code", "lowercase" ]
}
},
"filter": {
"code": {
"type": "pattern_capture",
"preserve_original" : 1,
"patterns": ["([1-9].+(?=\/))"]
}
},
"tokenizer" : {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 6,
"max_gram": 32,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
Результаты, которые я получаю
{
"tokens": [{
"token": "simple",
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 0
},
{
"token": "simpled",
"start_offset": 0,
"end_offset": 7,
"type": "word",
"position": 1
},
{
"token": "simpledo",
"start_offset": 0,
"end_offset": 8,
"type": "word",
"position": 2
},
{
"token": "simpledoc",
"start_offset": 0,
"end_offset": 9,
"type": "word",
"position": 3
},
{
"token": "simpledoc0",
"start_offset": 0,
"end_offset": 10,
"type": "word",
"position": 4
},
{
"token": "simpledoc00",
"start_offset": 0,
"end_offset": 11,
"type": "word",
"position": 5
},
{
"token": "simpledoc000",
"start_offset": 0,
"end_offset": 12,
"type": "word",
"position": 6
},
{
"token": "simpledoc0001",
"start_offset": 0,
"end_offset": 13,
"type": "word",
"position": 7
},
{
"token": "simpledoc00015",
"start_offset": 0,
"end_offset": 14,
"type": "word",
"position": 8
},
{
"token": "simpledoc000155",
"start_offset": 0,
"end_offset": 15,
"type": "word",
"position": 9
}
]
}
И я немного растерялся. Много пробовал, но я не могу вернуть 155, похоже, что pattern_capture работает неправильно.
Спасибо за ответ!
Обновить:
Изменил токенизатор с Edgengram на ngram, вроде работает, но есть много ненужных токенов.