我有一些课:
class SomeClass(val client: ElasticClient, val config: Config, val configName: String)(implicit val ec: ExecutionContext) extends ElasticSearchRepositoryWrapper[AnotherClass]{ override def mapping: Option[MappingDefinition] = Some( properties( KeywordField("id"), TextField("name").fielddata(true).analyzer("ngram_analyzer"), KeywordField("lang"), BasicField("order", "long"), ... ) )
我正在repository.createIndexIfNotExists()
使用此映射创建索引。
现在,我必须ngram_analyzer
在索引设置中创建:
"settings": { "index": { "analysis": { "analyzer": { "ngram_analyzer": { "filter": [ "lowercase" ], "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "token_chars": [ "letter", "digit" ], "min_gram": "3", "type": "ngram", "max_gram": "3" } } } }
如何使用elastic4s做到这一点?
好。的许多功能已createIndexIfNotExists()
被弃用。因此,我使用了CreateIndexRequest
放置分析仪的位置:
CreateIndexRequest(repository.indexName, analysis = Option(ngramAnalyzer), mapping = repository.mapping)
.shards(repository.shards)
.replicas(repository.replicas)
然后像这样初始化我的分析器:
val ngramAnalyzer = Analysis(
List(CustomAnalyzer(
name = "ngram_analyzer",
tokenizer = "ngram",
charFilters = Nil,
tokenFilters = List("lowercase")
))
)