Я справляюсь с Elasticsearch и имею небольшой набор данных с несколькими терминами с общими Ngrams.
Например, в настоящее время Elasticsearch оценивает
United Kingdom > Agriculture > Grains > Feed Wheat > Ex-Farm
как лучшее соответствие для "Мясо", чем
United Kingdom > Agriculture > Livestock & Meat > Lamb > Deadweight
Я считаю, что если я смогу заставить ES учесть длину совпадающего Ngram в своем счете, то эта проблема в основном решится сама собой.
Я потратил много времени на поиск любых подсказок, но ничего не сделалПодойди пока.
Я определил свой фильтр Ngram, используя python'sasticsearch-dsl
ngram_filter = token_filter(
'ngram_filter',
type='ngram',
min_gram=3,
max_gram=10,
)
ngram_analyzer = analyzer(
'ngram_analyzer',
type='custom',
tokenizer='whitespace',
filter=[
'lowercase',
ngram_filter
]
)