Возможна фильтрация по длине с помощью специального анализатора. Документация Elasticsearch содержит пример того, как перестроить анализатор Engli sh, чтобы мы могли добавить туда фильтр минимальной длины, например,
PUT /attachment_index
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"length": {
"type": "length",
"min": 2
}
},
"analyzer": {
"length_english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer",
"length"
]
}
}
}
}
}
Чтобы попробовать это:
GET attachment_index/_analyze
{
"analyzer": "length_english",
"text": "mark twain 3"
}
возвращает
{
"tokens" : [
{
"token" : "mark",
"start_offset" : 0,
"end_offset" : 4,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "twain",
"start_offset" : 5,
"end_offset" : 10,
"type" : "<ALPHANUM>",
"position" : 1
}
]
}
, поэтому 3
был отфильтрован по желанию. Анализатор length_english
можно использовать вместо english
в запросе на совпадение.