Термины с несколькими словами и слово nGrams?
Я стремлюсь создать индекс, который для каждого документа будет разбивать его по словам ngrams (uni, bi и tri), а затем охватывать анализ векторов терминов для всех этих слов ngrams. Это возможно с Elasticsearch?
Например, для поля документа, содержащего "Красный автомобиль едет". Я бы смог получить информацию:
red - 1 instance
car - 1 instance
drives - 1 instance
red car - 1 instance
car drives - 1 instance
red car drives - 1 instance
Заранее спасибо!
1 ответ
Предполагая, что вы уже знаете об API Term Vectors, вы можете применить фильтр токенов с шипами во время индексации, чтобы добавить эти термины как независимые друг от друга в поток токенов.
настройка min_shingle_size
до 1 (вместо значения по умолчанию 2) и max_shingle_size
по крайней мере 3 (вместо значения по умолчанию 2)
И исходя из того факта, что вы оставили "the" из возможных терминов, вы должны использовать фильтр стоп-слов перед применением фильтра shingles.
Настройки анализатора будут примерно такими:
{
"settings": {
"analysis": {
"analyzer": {
"evolutionAnalyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"custom_stop",
"custom_shingle"
]
}
},
"filter": {
"custom_stop": {
"type": "stop",
"stopwords": "_english_",
"enable_position_increments":"false"
},
"custom_shingle": {
"type": "shingle",
"min_shingle_size": "1",
"max_shingle_size": "3"
}
}
}
}
}
Вы можете проверить анализатор, используя _analyze
конечная точка API.