1

如何使用 elastic4s 将以下 German_phonebook 分析器添加到弹性搜索?

        "index": {
            "analysis": {
                "analyzer": {
                    "german": {
                        "filter": [
                            "lowercase",
                            "german_stop",
                            "german_normalization",
                            "german_stemmer"
                        ],
                        "tokenizer": "standard"
                    },
                    "german_phonebook": {
                        "filter": [
                            "german_phonebook"
                        ],
                        "tokenizer": "keyword"
                    },
                    "mySynonyms": {
                        "filter": [
                            "lowercase",
                            "mySynonymFilter"
                        ],
                        "tokenizer": "standard"
                    }
                },
                "filter": {
                    "german_phonebook": {
                        "country": "CH",
                        "language": "de",
                        "type": "icu_collation",
                        "variant": "@collation=phonebook"
                    },
                    "german_stemmer": {
                        "language": "light_german",
                        "type": "stemmer"
                    },
                    "german_stop": {
                        "stopwords": "_german",
                        "type": "stop"
                    },
                    "mySynonymFilter": {
                        "synonyms": [
                            "swisslift,lift"
                        ],
                        "type": "synonym"
                    }
                }
            },

这里的核心问题是为 icu_collat​​ion 类型的German_phonebook过滤器使用哪个过滤器?

...

按照答案,我想出了这段代码:

  case class GPhonebook() extends TokenFilterDefinition {
    val filterType = "phonebook"
    def name = "german_phonebook"
    override def build(source: XContentBuilder): Unit = {
      source.field("tokenizer", "keyword")
      source.field("country", "CH")
      source.field("language", "de")
      source.field("type", "icu_collation")
      source.field("variant", "@collation=phonebook")  
    }
  }

分析器定义现在看起来像这样:

  CustomAnalyzerDefinition(
      "german_phonebook",
      KeywordTokenizer("myKeywordTokenizer2"),
      GPhonebook()
  )
4

1 回答 1

1

你真正想要的是某种方式说

CustomTokenFilter("german_phonebook)或者BuiltInTokenFilter("german_phonebook")但你不能(我会补充)。

所以现在,你需要扩展TokenFilterDefinition.

例如,类似的东西

case class GPhonebook extends TokenFilterDefinition {
  val filterType = "phonebook"
  override def build(source: XContentBuilder): Unit = {
    // set extra params in here
  }
}
于 2016-02-24T15:26:31.427 回答