1

ElasticSearch / NEST 相当新 - 我在包含英国邮政编码的映射上有一个属性(例如 DT5 2HW,BB1 9DR)。目前,我有以下代码: -

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

在创建流利的映射时,我试图找到指定分析器的正确位置(所以我可以实现这里正在做的事情),但是:-

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

是不是不可能通过流畅的映射来做到这一点?这是否意味着我必须通过 CreateIndex -> Settings -> Analysis 指定可用的分析器,然后指定要在具有 POCO 属性的属性级别上使用的分析器?

我觉得我在某个地方出现了根本性的错误 - 任何指针都将不胜感激!

4

1 回答 1

1

事实证明,答案与它是否流利无关,但您不能为 Keyword fields 指定分析器,因此数据将按原样使用。

您可以看到关键字文档与文本字段文档之间的区别。我被关键字数据类型参考顶部的文本所误导,该文本表示“用于索引结构化内容的字段,例如电子邮件地址、主机名、状态代码、邮政编码或标签”。

我怀疑我正在尝试做的是正在开发 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")
                                                   )
                                       )
                                )
)
于 2017-08-07T11:07:35.700 回答