Добавление нормализатора для всех полей ключевых слов NEST - PullRequest
0 голосов
/ 06 апреля 2020

Я могу настроить нормализатор для сопоставления ключевых слов в NEST, используя следующее:

   client.Indices.Create(indexName, c => c
        .Map<Item>(m => m.Properties(ps => ps
          .Text(s => s
            .Name(new PropertyName("someProp"))
            .Fields(f => f
              .Keyword(kw => kw
                .Name("keyword")
                .Normalizer("my_normalizer")
              )
            )
          )
        )
      )

Можно ли добавить нормализатор во все поля ключевых слов для указанного сопоставления, не объявляя все поля? Я изучил шаблон посетителя свойства и использовал AutoMap, однако мне не очень повезло, так как все, что установлено в них, кажется перезаписано, возможно, это не подходящее место для этого?

1 Ответ

1 голос
/ 06 апреля 2020

Один из вариантов - использовать dynamici c template , который создаст сопоставление ключевых слов с указанным нормализатором для всех строк

var createIndexResponse = await client.Indices.CreateAsync("my_index", c => c
    .Settings(s => s.Analysis(a => a
        .Normalizers(n => n.Custom("lowercase", cn => cn.Filters("lowercase")))))
    .Map(m => m.DynamicTemplates(dt => dt.DynamicTemplate("string_to_keyword", t => t
        .MatchMappingType("string")
        .Mapping(map => map.Keyword(k => k.Normalizer("lowercase")))))));

, проиндексировав этот документ

var indexDocumentAsync = await client.IndexDocumentAsync(new Document {Id = 1, Name = "name"});

создаст следующее отображение индекса

{
  "my_index": {
    "mappings": {
      "dynamic_templates": [
        {
          "string_to_keyword": {
            "match_mapping_type": "string",
            "mapping": {
              "normalizer": "lowercase",
              "type": "keyword"
            }
          }
        }
      ],
      "properties": {
        "id": {
          "type": "long"
        },
        "name": {
          "type": "keyword",
          "normalizer": "lowercase"
        }
      }
    }
  }
}

Надеюсь, это поможет.

...