Elasticsearch - 无法使用建议字段进行搜索(“不是完成建议字段”)

时间:2017-02-10 02:17:59

标签: ruby elasticsearch

在弹性搜索中,我将记录存储在trends命名空间和trend主题中。这些是简单的对象,只有name(字符串)和id

我想通过自动填充按名称搜索,为此我正在尝试使用索引搜索。

这是我将代码添加到name列的代码。在这里,我使用name_suggest列插入相同数据作为name列,并在查询中使用。

  def self.index_column_mappings
    elasticsearch.index({
      index: "trends",
      type: "trend",
      body: {
        mappings: {
          trend: {
            properties: {
              name: {
                type: "string"
              },
              name_suggest: {
                type: "completion"
              }
            }
          }
        }
      }
    })
  end

从我DELETE *开始。然后我添加此列映射并添加一些记录。接下来我运行它来搜索:

  def suggest(term)
    @client.search({
      index: "trends",
      type: "trend",
      body: {
        suggest: {
          name_suggest: {
            prefix: term,
            completion: {
              field: "name_suggest"
            }
          }
        }
      }  
    })
  end

我收到以下错误:

  

Elasticsearch :: Transport :: Transport :: Errors :: BadRequest:[400] {“error”:{“root_cause”:[{“type”:“illegal_argument_exception”,“reason”:“Field [name_suggest] is不是完成建议字段“}],”类型“:”search_phase_execution_exception“,”reason“:”所有分片失败“,”阶段“:”查询“,”分组“:true,”failed_shards“:[{”shard“ :0,“index”:“trends”,“node”:“YVcINtPlSU2u8R2lT9VxPQ”,“reason”:{“type”:“illegal_argument_exception”,“reason”:“Field [name_suggest]不是完成建议字段”}} ],“caused_by”:{“type”:“illegal_argument_exception”,“reason”:“Field [name_suggest]不是完成建议字段”}},“status”:400}   来自/home/max/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/elasticsearch-transport-5.0.3/lib/elasticsearch/transport/transport/base.rb:201:in `__raise_transport_error'

似乎重要的部分是:字段[name_suggest]不是完成建议字段。我不明白我是如何设置该字段的。

顺便说一下,我正在使用弹性搜索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 个答案:

答案 0 :(得分:1)

最后答案。 您使用错误的方法来索引数据。寻找example here

 def self.index_column_mappings
     client.indices.create({
      index: "trends",
      body: {
        mappings: {
          trend: {
            properties: {
                name:  { type: 'string' },
                name_suggest:  { type: 'completion' }
            }
          }
        }
      }
    })
  end