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上的属性?
我觉得我在某个地方已经基本上错了 - 任何指针都会非常感激!
答案 0 :(得分:0)
事实证明答案并不是关于它是否流利,但是你不能指定关键字字段的分析器,因此数据将按原样使用。
您可以看到the documentation for keyword与the 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")
)
)
)
)