rails - Elasticsearch 完成建议和搜索 API
rails - Elasticsearch completion suggester and search API
我正在使用搜索API,现在需要添加completion suggester,我正在使用elasticsearch-rails gem.
当我搜索一篇文章时,一切正常
http://localhost:9200/articles/_search
"query": {
"multi_match": {
"query": "test",
"fields": [
"title", "tags", "content"
]
}
}
}
但是由于我已经实现了完成建议器,所以我不得不编辑 as_indexed_json
以使其工作,但现在搜索 API 不再工作,只有建议。
这是我的文章模型:
def self.search(query)
__elasticsearch__.search(
{
query: {
multi_match: {
query: query,
fields: ['title', 'content', 'tags']
}
}
})
end
def self.suggest(query)
Article.__elasticsearch__.client.suggest(:index => Article.index_name, :body => {
:suggestions => {
:text => query,
:completion => {
:field => 'suggest'
}
}
})
end
def as_indexed_json(options={})
{
:name => self.title,
:suggest => {
:input => self.title,
:output => self.title,
:payload => {
:content => self.content,
:tags => self.tags,
:title => self.title
}
}
}.as_json
end
是否可以让 _search 和 _suggest 与同一个模型一起工作?
我只是在深入研究 elasticsearch,但据我了解,您可以在序列化程序函数中添加修改之前的内容并重新创建索引,它们将在数据库中很好地共存。例如:
def as_indexed_json(options={})
{
:name => self.title,
:suggest => {
:input => self.title,
:output => self.title,
:payload => {
:content => self.content,
:tags => self.tags,
:title => self.title
}
}
}.as_json.merge(self.as_json) # or the customized hash you used
为避免索引冗余,您可以查看 aliases and routing。
我正在使用搜索API,现在需要添加completion suggester,我正在使用elasticsearch-rails gem.
当我搜索一篇文章时,一切正常 http://localhost:9200/articles/_search
"query": {
"multi_match": {
"query": "test",
"fields": [
"title", "tags", "content"
]
}
}
}
但是由于我已经实现了完成建议器,所以我不得不编辑 as_indexed_json
以使其工作,但现在搜索 API 不再工作,只有建议。
这是我的文章模型:
def self.search(query)
__elasticsearch__.search(
{
query: {
multi_match: {
query: query,
fields: ['title', 'content', 'tags']
}
}
})
end
def self.suggest(query)
Article.__elasticsearch__.client.suggest(:index => Article.index_name, :body => {
:suggestions => {
:text => query,
:completion => {
:field => 'suggest'
}
}
})
end
def as_indexed_json(options={})
{
:name => self.title,
:suggest => {
:input => self.title,
:output => self.title,
:payload => {
:content => self.content,
:tags => self.tags,
:title => self.title
}
}
}.as_json
end
是否可以让 _search 和 _suggest 与同一个模型一起工作?
我只是在深入研究 elasticsearch,但据我了解,您可以在序列化程序函数中添加修改之前的内容并重新创建索引,它们将在数据库中很好地共存。例如:
def as_indexed_json(options={})
{
:name => self.title,
:suggest => {
:input => self.title,
:output => self.title,
:payload => {
:content => self.content,
:tags => self.tags,
:title => self.title
}
}
}.as_json.merge(self.as_json) # or the customized hash you used
为避免索引冗余,您可以查看 aliases and routing。