Search code examples
node.jselasticsearchindexingfull-text-searchanalyzer

Why isn't Elasticsearch detecting my custom made analyzer?


I made an index "user-name" with a custom made analyzer called 'autocomplete':

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'
            ]
          }
        }
      }
    }
  }

Then I try to reference this custom made analyzer by trying to use it in a mapping:

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

but then I get this error: "reason": "analyzer [autocomplete] not found for field [name]". Why isn't my autocomplete analyzer being detected? Thanks.


Solution

  • You're almost there. You simply need to put the index settings inside the body parameter:

    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'
                ]
              }
            }
          }
        }
       }
    }