Elasticsearch ngram index ничего не возвращает
Я пытаюсь построить собственный анализатор, используя nGram, и, очевидно, он работает нормально, я просто не могу запросить его по какой-то причине. Я использую `asticsearch-модель в Ruby
Вот как определяется индекс:
include Elasticsearch::Model
index_name "stemmed_videos"
settings index: { number_of_shards: 5 },
analysis: {
analyzer: {
video_analyzer: {
tokenizer: :stemmer,
filter: [
"lowercase"
]
},
standard_lowercase: {
tokenizer: :standard,
filter: [
"lowercase"
]
}
},
tokenizer: {
stemmer: {
type: "nGram",
min_gram: 2,
max_gram: 10,
token_chars: [
"letter",
"digit",
"symbol"
]
}
}
} do
mappings do
indexes :title, type: 'string', analyzer: 'video_analyzer'
indexes :description, type: 'string', analyzer: 'standard_lowercase'
end
end
def as_indexed_json(options = {})
as_json(only: [:title, :description])
end
Я попытался взять одну из строк, которые я пытаюсь проиндексировать, и запустить ее через " http: // localhost: 9200 / stemmed_videos / _analyze? Pretty = 1 & analyzer = video_analyzer & text = indiana_jones_4-tlr3_h640w.mov", и он, очевидно, выполняет правильная вещь. Но тогда единственный способ сделать общий запрос - это добавить символы подстановки, а это не то, чего я ожидаю.
[8] pry(main)> Video.__elasticsearch__.search('*ind*').results.total
=> 4
[9] pry(main)> Video.__elasticsearch__.search('ind').results.total
=> 0
(4 - правильное количество результатов в моих данных испытаний). Я хотел бы добиться правильных результатов без подстановочных знаков, потому что теперь у меня есть необходимость взять строку запроса и добавить подстановочные знаки в коде, что, честно говоря, довольно плохо. Как я могу сделать это?
Заранее спасибо.