Elasticsearch-rails补全建议器、映射数据、创建索引、建议方法
Elasticsearch-rails completion suggester, map data, create indexes, suggest method
我正在使用 elasticsearch-model
和 elasticsearch-rails
个宝石。
在我的个人资料模型中,我有
settings index: { number_of_shards: 3 } do
mappings dynamic: 'false' do
indexes :profile_type, analyzer: 'keyword'
indexes :profile do |p|
indexes :name, type: 'multi_field' do
indexes :name, analyzer: 'snowball'
indexes :tokenized, analyzer: 'keyword'
end
end
end
end
我尝试添加 suggest
字段
settings index: { number_of_shards: 3 } do
mappings dynamic: 'false' do
indexes :profile_type, analyzer: 'keyword'
indexes :suggest, type: 'suggest' # not sure about this
# do not really know how to index this field
indexes :profile do |p|
indexes :name, type: 'multi_field' do
indexes :name, analyzer: 'snowball'
indexes :tokenized, analyzer: 'keyword'
end
end
end
end
我正在尝试在 profile.name
上提出建议,我添加了 as_indexed_json
def as_indexed_json(options={})
suggest= {
suggest: {
:input => profile.name,
:output => profile.name,
:payload => {
name: profile.name
}
}
}
self.as_json(
:only => [:profile_type, :slug],
:include => {
:profile => {}
}
).merge(suggest)
end
任何帮助,任何建议,我们将不胜感激。
我想出了如何映射数据,使用 elasticsearch-rails
gem
settings index: { number_of_shards: 3 } do
mappings dynamic: 'false' do
indexes :profile_type, analyzer: 'keyword'
indexes :suggest, type: 'completion', index_analyzer: 'simple', search_analyzer: 'simple', payloads: true
# will do the trick
indexes :profile do |p|
indexes :name, type: 'multi_field' do
indexes :name, analyzer: 'snowball'
indexes :tokenized, analyzer: 'keyword'
end
end
end
end
然后创建索引
def as_indexed_json(options={})
suggest= {
suggest: {
:input => profile.name,
:output => profile.name,
:payload => {
name: profile.name
}
}
}
self.as_json(
:only => [:profile_type, :slug],
:include => {
:profile => {}
}
).merge(suggest)
end
那就不要用search
方法,改用suggest
方法
def self.suggest query
__elasticsearch__.client.suggest(:index => index_name, :body => {
:suggestions => {
:text => query,
:completion => {
:field => 'suggest',
:size => 20
}
}
})
end
这样你就可以得到complete suggestion
我正在使用 elasticsearch-model
和 elasticsearch-rails
个宝石。
在我的个人资料模型中,我有
settings index: { number_of_shards: 3 } do
mappings dynamic: 'false' do
indexes :profile_type, analyzer: 'keyword'
indexes :profile do |p|
indexes :name, type: 'multi_field' do
indexes :name, analyzer: 'snowball'
indexes :tokenized, analyzer: 'keyword'
end
end
end
end
我尝试添加 suggest
字段
settings index: { number_of_shards: 3 } do
mappings dynamic: 'false' do
indexes :profile_type, analyzer: 'keyword'
indexes :suggest, type: 'suggest' # not sure about this
# do not really know how to index this field
indexes :profile do |p|
indexes :name, type: 'multi_field' do
indexes :name, analyzer: 'snowball'
indexes :tokenized, analyzer: 'keyword'
end
end
end
end
我正在尝试在 profile.name
上提出建议,我添加了 as_indexed_json
def as_indexed_json(options={})
suggest= {
suggest: {
:input => profile.name,
:output => profile.name,
:payload => {
name: profile.name
}
}
}
self.as_json(
:only => [:profile_type, :slug],
:include => {
:profile => {}
}
).merge(suggest)
end
任何帮助,任何建议,我们将不胜感激。
我想出了如何映射数据,使用 elasticsearch-rails
gem
settings index: { number_of_shards: 3 } do
mappings dynamic: 'false' do
indexes :profile_type, analyzer: 'keyword'
indexes :suggest, type: 'completion', index_analyzer: 'simple', search_analyzer: 'simple', payloads: true
# will do the trick
indexes :profile do |p|
indexes :name, type: 'multi_field' do
indexes :name, analyzer: 'snowball'
indexes :tokenized, analyzer: 'keyword'
end
end
end
end
然后创建索引
def as_indexed_json(options={})
suggest= {
suggest: {
:input => profile.name,
:output => profile.name,
:payload => {
name: profile.name
}
}
}
self.as_json(
:only => [:profile_type, :slug],
:include => {
:profile => {}
}
).merge(suggest)
end
那就不要用search
方法,改用suggest
方法
def self.suggest query
__elasticsearch__.client.suggest(:index => index_name, :body => {
:suggestions => {
:text => query,
:completion => {
:field => 'suggest',
:size => 20
}
}
})
end
这样你就可以得到complete suggestion