我正在尝试使用 nGram 构建自定义分析器,显然它工作正常,但由于某种原因我无法查询它。我在 Ruby 中使用 `elasticsearch-model
以下是索引的定义方式:
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 是我的测试数据中正确的结果数)。我想要完成的是在没有通配符的情况下获得正确的结果,因为我现在需要获取查询字符串并在代码中添加通配符,老实说这是相当糟糕的。我怎样才能做到这一点?
提前致谢。