当前位置: 首页 > 知识库问答 >
问题:

弹性搜索-不能使用建议字段进行搜索(“不是完成建议字段”)

杨建章
2023-03-14

在弹性搜索中,我将记录存储在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
                     }
                  }
               }
            }
         }
      }
   }
}

共有1个答案

欧阳鸿哲
2023-03-14

最终答案。您使用错误的方法索引数据。在这里查找示例

 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” 启用筛选建议 我有什么想法可以实现这些?