为什么 Elasticsearch 没有检测到我定制的分析器?

Why isn't Elasticsearch detecting my custom made analyzer?

我用一个名为 'autocomplete':

的定制分析器创建了一个索引 "user-name"
client.indices.create({
    index: 'user-name',
    type: 'text',
    settings: {
      analysis: {
        filter: {
          autocomplete_filter: {
            type: 'edge-ngram',
            min_gram: 1,
            max_gram: 20
          }
        },
        analyzer: {
          autocomplete: {
            type: 'custom',
            tokenizer: 'standard',
            filter: [
              'lowercase',
              'autocomplete_filter'
            ]
          }
        }
      }
    }
  }

然后我尝试通过在映射中使用它来引用这个定制的分析器:

    client.indices.putMapping({
        index: 'user-name',
        type: 'text',
        body: {
          properties: {
            name: {
              type: 'string',
              analyzer: 'autocomplete',
              search_analyzer: 'standard'
            }
          }
        }
      })

但随后出现此错误:"reason":"analyzer [autocomplete] not found for field [name]"。为什么我的自动完成分析器没有被检测到?谢谢

你快到了。您只需要将索引 settings 放在 body 参数中:

client.indices.create({
    index: 'user-name',
    type: 'text',
    body: {
     settings: {
      analysis: {
        filter: {
          autocomplete_filter: {
            type: 'edge-ngram',
            min_gram: 1,
            max_gram: 20
          }
        },
        analyzer: {
          autocomplete: {
            type: 'custom',
            tokenizer: 'standard',
            filter: [
              'lowercase',
              'autocomplete_filter'
            ]
          }
        }
      }
    }
   }
}