在弹性搜索中,我将记录存储在trends
命名空间和trends
主题中。这些是简单的对象,只有名称
(string)和ID
。
我想通过自动完成搜索名称,为此我试图使用索引搜索。
def self.index_column_mappings
elasticsearch.index({
index: "trends",
type: "trend",
body: {
mappings: {
trend: {
properties: {
name: {
type: "string"
},
name_suggest: {
type: "completion"
}
}
}
}
}
})
end
def suggest(term)
@client.search({
index: "trends",
type: "trend",
body: {
suggest: {
name_suggest: {
prefix: term,
completion: {
field: "name_suggest"
}
}
}
}
})
end
ElasticSearch::Transport::Transport::Transport::Errors::BadRequest:[400]{“error”:{“root_cause”:[{“type”:“illegal_argument_exception”,“reason”:“field[name_suggise]不是一个完成建议字段”}],“type”:“search_phase_execution_exception”,“reason”:“所有碎片失败”,“phase”:“query”,“grouped”:true,“failed_shards”::“字段[name_sugges]不是完成建议字段”}}],“caused_by”:{“type”:“illegal_argument_exception”,“reason”:“字段[name_sugges]不是完成建议字段”}},“status”:400}来自/home/max/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/elasticsearch-transport-5.0.3/lib/elasticsearch/transport/base.rb:201:in`__raise_transport_error'
似乎重要的部分是:字段[name_suggise]不是一个完成建议字段。我不明白我怎么没能把场设置好。
顺便说一下,我使用的是弹性搜索5.x
下面是get/trends/_mapping
对注释的响应结果:
{
"trends": {
"mappings": {
"trend": {
"properties": {
"id": {
"type": "long"
},
"mappings": {
"properties": {
"trend": {
"properties": {
"properties": {
"properties": {
"name": {
"properties": {
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"name_suggest": {
"properties": {
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name_suggest": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
最终答案。您使用错误的方法索引数据。在这里查找示例
def self.index_column_mappings
client.indices.create({
index: "trends",
body: {
mappings: {
trend: {
properties: {
name: { type: 'string' },
name_suggest: { type: 'completion' }
}
}
}
}
})
end
问题内容: 使用Elasticsearch完成建议程序时,我在返回与一词查询匹配的多词输入建议时遇到问题。 示例结构: 工作查询: 结果 查询失败: 结果 我希望得到与工作查询相同的结果,匹配“猫狗”。有什么建议是什么问题,以及如何使失败的查询正常工作?当使用标准分析器而不是空白分析器时,我得到相同的结果。我想每个输入字符串使用多个单词,如上面的示例所示。 问题答案: 完成建议器是前缀建议器,这意
我已经能够通过使用cURL获得建议(参见代码块)。但是我需要在我的代码中这样做,这样我就可以使用我的自定义endpointTOMCAT_ROOT/suggest?q=el。如何使用Spring数据创建查询,以在Java代码中获得相同的结果。 我的es映射: 我的POJO: 我的问题是: 我的查询结果:
由于已经有很多关于连字符的问题,我已经尝试了以下解决方案: 使用字符筛选器:ElasticSearch-在名称中使用连字符进行搜索。 所以我做了这个映射: 所以char筛选器似乎没有在搜索字符串上执行?我该怎么做才能让它起作用?
我已经测试了elastic search highlight field函数,它运行良好。我使用了elastic search 2.4.4和spring-data-elasticsearch-2.0.0.RELEASE 示例代码在下面的帖子中 如何使用Spring data elasticsearch提供高亮显示 我最近将elastic search升级到5.5.0和spring-data-ela
问题内容: 我正在为基于php的网站创建一个搜索引擎。我需要搜索一个mysql表。 事实是,搜索引擎必须非常“智能”,以便用户可以轻松找到他们的商品(这是一个分类网站)。 我目前已使用以下代码设置了FULLTEXT搜索: 但这还不够… 例如,假设该字段包含类似的内容。如果我搜索,我将不会得到任何结果。尾数(’ci’)只是汽车型号中许多尾数之一,在搜索表时必须将其考虑在内。 或者,如果该字段是什么?
我想从多个领域得到建议。我找不到这样的例子,所以也许这不是最好的主意,但我对你的意见很感兴趣。 要求是: GET查询适用于文本“fyodor”和“dostoevsky”,此示例仅适用于“fyodor” 启用筛选建议 我有什么想法可以实现这些?