Я пытаюсь построить собственный анализатор, используя 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 - правильное число результатов в моих тестовых данных). Я хотел бы добиться правильных результатов без подстановочных знаков, потому что с тем, что у меня сейчас есть, мне нужновзять строку запроса и добавить в код символы подстановки, что, честно говоря, довольно плохо. Как я могу это сделать?
Заранее спасибо.