Начните с применения EdgeNgramFilter с min = 1 и max = 1000 (мы хотим, чтобы весь оригинальный токен был включен). Пример:
hello => 'h', 'he', 'hel', 'hell', 'hello'
Во-вторых, используйте NGramFilter с min = 2. (я буду использовать 2 в качестве максимума в примере для простоты)
'h', 'he', 'hel', 'hell', 'hello' => 'h', 'he', 'he', 'el', 'he', 'el', 'll ',' он ',' el ',' ll ',' lo '
Теперь у вас будет несколько идентичных токенов, поскольку вы применили NGramFilter ко всем «частичным» токенам из EdgeNGramFilter, но просто примените RemoveDuplicatesTokensFilter, чтобы удалить их.
'h', 'он', 'он', 'el', 'он', 'el', 'll', 'он', 'el', 'll', 'lo' => 'h ',' он ',' el ',' ll ',' lo '
Теперь ваше поле будет поддерживать один запрос char "columns", а запрос "содержит несколько символов".