【问题标题】:Must specify either an analyzer type, or a tokenizer必须指定分析器类型或标记器
【发布时间】:2019-05-28 14:35:24
【问题描述】:

我基本上是弹性搜索的新手。我正在尝试在“name_auto”字段上实现模糊搜索、同义词搜索、边缘 ngram 和自动完成,但似乎我的索引创建失败了。
另一个问题我可以为“名称”字段实现所有分析器,如果可以的话,我该怎么做。

  {
        "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"
                                    }
                                }
                            }

                        }
                    }
                }
            }
        }
    }

这是输出:

>   {
>         "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
>     }

我哪里做错了,请指导我正确的方向。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您的tokenizer 部分位于analyzer 部分内,这是不正确的。试试这个,它应该可以工作:

    {
      "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"
                  }
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 是的,我已更正了,非常感谢,但现在我收到此错误

      在此服务器上找不到请求的 URL /opt/bitnami/elasticsearch/config/analysis/wn_s.pl。

    • 这是一个不同的问题。您应该关闭此问题并打开一个新问题
    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2013-03-13
    相关资源
    最近更新 更多