user11118940
user11118940

Reputation:

Must specify either an analyzer type, or a tokenizer

I am basically new to elastic search .I am trying to implement fuzzy search , synonym search ,edge ngram and autocomplete on "name_auto" field , but it seems like my index creation is failing.
another question can i implement all the analyzer for "name" field if so how can i do it.

  {
        "settings": {
            "index": {
                "analysis": {
                    "filter": {
                        "synonym": {
                            "ignore_case": "true",
                            "type": "synonym",
                            "format": "wordnet",
                            "synonyms_path": "analysis/wn_s.pl"
                        }
                    },
                    "analyzer": {
                        "synonym": {
                            "tokenizer": "whitespace",

                            "filter": [
                                "synonym"
                            ]
                        },

                        "keyword_analyzer": {
                            "filter": [
                                "lowercase",
                                "asciifolding",
                                "trim"
                            ],
                            "char_filter": [],
                            "type": "custom",
                            "tokenizer": "keyword"
                        },
                        "edge_ngram_analyzer": {
                            "filter": [
                                "lowercase"
                            ],
                            "tokenizer": "edge_ngram_tokenizer"
                        },
                        "edge_ngram_search_analyzer": {
                            "tokenizer": "lowercase"
                        },


                        "tokenizer": {
                            "edge_ngram_tokenizer": {
                                "type": "edge_ngram",
                                "min_gram": 1,
                                "max_gram": 25,
                                "token_chars": [
                                    "letter"
                                ]
                            }
                        }
                    },
                    "mappings": {
                        "properties": {
                            "firebaseId": {
                                "type": "text"
                            },
                            "name": {
                                "fielddata": true,
                                "type": "text",
                                "analyzer": "standard"
                            },
                            "name_auto": {
                                "type": "text",

                                "fields": {
                                    "keywordstring": {
                                        "type": "text",
                                        "analyzer": "keyword_analyzer"
                                    },
                                    "edgengram": {
                                        "type": "text",
                                        "analyzer": "edge_ngram_analyzer",
                                        "search_analyzer": "edge_ngram_search_analyzer"
                                    },
                                    "completion": {
                                        "type": "completion"
                                    },
                                    "synonym_analyzer": {
                                        "type": "synonym",
                                        "analyzer": "synonym"
                                    }
                                }
                            }

                        }
                    }
                }
            }
        }
    }

This is the output :

>   {
>         "error": {
>             "root_cause": [
>                 {
>                     "type": "illegal_argument_exception",
>                     "reason": "analyzer [tokenizer] must specify either an analyzer type, or a tokenizer"
>                 }
>             ],
>             "type": "illegal_argument_exception",
>             "reason": "analyzer [tokenizer] must specify either an analyzer type, or a tokenizer"
>         },
>         "status": 400
>     }

where am i doing wrong please guide me through right direction.

Upvotes: 1

Views: 3092

Answers (1)

Val
Val

Reputation: 217304

Your tokenizer section is located inside the analyzer section, which is not correct. Try with this instead, it should work:

{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "synonym": {
            "ignore_case": "true",
            "type": "synonym",
            "format": "wordnet",
            "synonyms_path": "analysis/wn_s.pl"
          }
        },
        "analyzer": {
          "synonym": {
            "tokenizer": "whitespace",
            "filter": [
              "synonym"
            ]
          },
          "keyword_analyzer": {
            "filter": [
              "lowercase",
              "asciifolding",
              "trim"
            ],
            "char_filter": [],
            "type": "custom",
            "tokenizer": "keyword"
          },
          "edge_ngram_analyzer": {
            "filter": [
              "lowercase"
            ],
            "tokenizer": "edge_ngram_tokenizer"
          },
          "edge_ngram_search_analyzer": {
            "tokenizer": "lowercase"
          }
        },
        "tokenizer": {
          "edge_ngram_tokenizer": {
            "type": "edge_ngram",
            "min_gram": 1,
            "max_gram": 25,
            "token_chars": [
              "letter"
            ]
          }
        }
      },
      "mappings": {
        "properties": {
          "firebaseId": {
            "type": "text"
          },
          "name": {
            "fielddata": true,
            "type": "text",
            "analyzer": "standard"
          },
          "name_auto": {
            "type": "text",
            "fields": {
              "keywordstring": {
                "type": "text",
                "analyzer": "keyword_analyzer"
              },
              "edgengram": {
                "type": "text",
                "analyzer": "edge_ngram_analyzer",
                "search_analyzer": "edge_ngram_search_analyzer"
              },
              "completion": {
                "type": "completion"
              },
              "synonym_analyzer": {
                "type": "synonym",
                "analyzer": "synonym"
              }
            }
          }
        }
      }
    }
  }
}

Upvotes: 4

Related Questions