Я чувствовал, что этот топи c недостаточно хорошо освещен, поэтому я опубликую рабочий пример.
Вы должны создать индекс в списке ngram атрибута, который вы хотите найти.
CreateIndex({
name: 'cities_by_ngrams',
source: [
{
// If your collections have the same property that you want to access you can pass a list to the collection
collection: [Collection('cities')],
fields: {
wordparts: Query(
Lambda('city',
Distinct(
Union(
Let(
{
ngrams: q.Map(
// ngrams
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
Lambda('i', NGram(
LowerCase(Select(['data', 'name'], Var('city'))),
Var('i'),
Var('i'),
)
)
)
},
Var('ngrams')
)
)
)
)
)
}
}
],
terms: [
{
binding: 'wordparts'
}
]
})
, а затем поиск с разбивкой на страницы
Map(
Paginate(Match(Index('cities_by_ngrams'), 'londo')),
Lambda('ref', Get(Var('ref')))
)
более простой способ - получить список ngram, по которым вы планируете искать для каждого документа, а затем создать индекс для этого поля. Обратной стороной является то, что вам придется исключить это поле там, где оно вам не нужно.