如何使用NEST Fluent映射为ElasticSearch 5.x指定索引/字段分析器?

时间:2017-08-07 10:53:24

标签: c# .net elasticsearch nest elasticsearch-analyzers

ElasticSearch / NEST的合理新手 - 我在映射上拥有一个属性,用于保存英国邮政编码(例如DT5 2HW,BB1 9DR)。目前,我有以下代码: -

if (!client.IndexExists("user").Exists)
{
    client.CreateIndex("user", c => c.Mappings(
                                        m => m.Map<User>(
                                              mp => mp.AutoMap()
                                        )
                                    )                                                                    
                      );
}

我正在尝试在创建流畅的映射(so I can implement what's being done here)时找到指定分析器的正确位置,但是: -

  • 调用mp.AutoMap().Analyzer()被标记为已弃用/将在6.0中删除,并警告默认分析器将在类型级别删除,并且需要在索引或字段级别指定(旁注) :按字段,它们是指属性吗?)
  • Analyzer()Keyword() 之后,
  • Name()在Intellisense中不可用

通过流畅的映射是否无法做到这一点?这是否意味着我必须通过CreateIndex指定可用的分析器 - &gt;设置 - &gt;分析,然后指定分析器在属性级别上使用POCO上的属性?

我觉得我在某个地方已经基本上错了 - 任何指针都会非常感激!

1 个答案:

答案 0 :(得分:0)

事实证明答案并不是关于它是否流利,但是你不能指定关键字字段的分析器,因此数据将按原样使用。

您可以看到the documentation for keywordthe documentation for text fields之间的区别。我对关键字数据类型的引用顶部的文本有点误导,该关键字数据类型表示&#34;用于索引结构化内容的字段,例如电子邮件地址,主机名,状态代码,邮政编码或标签&#34;。

我怀疑我尝试做的是正在开发的Normalizers,但它仍然标记为实验性的,但至少我现在可以使用Text。

c => c.Mappings(m => m.Map<User>(
                    mp => mp.AutoMap()
                            .Properties(p => p.Text(
                                     t => t.Name(n => n.Postcode)
                                           .Analyzer("my_analyzer")
                                                   )
                                       )
                                )
)