【问题标题】:How can I specify index / field analyzers using NEST fluent mapping for ElasticSearch 5.x?如何使用 ElasticSearch 5.x 的 NEST 流畅映射指定索引/字段分析器?
【发布时间】:2017-08-07 19:15:05
【问题描述】:

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 中删除,并警告说默认分析器将在类型级别删除,并且需要在索引或字段级别指定 (旁注:由字段,它们是指财产吗?)
  • Keyword()Name() 之后,Analyzer() 在 Intellisense 中不可用

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

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

【问题讨论】:

  • 我相信它现在是用于字符串分析搜索的“文本”。
  • 文本?你是什​​么意思 - 你指的是字符串与关键字/文本属性吗?
  • 就像以前一样,您曾经拥有.String( ... ),如果您正在使用它进行 ngram、关键字搜索等操作,它已经成为 .Text(...)
  • 我在看elastic.co/guide/en/elasticsearch/reference/current/…,所以我认为我应该使用邮政编码的关键字,但我看到文档本身确实表明您不能设置分析器。所以我必须使用 Text(显然 String 也被 5.x 弃用了)——干杯!
  • keyword 数据类型未分析,无法应用分析;在 5.0 中,string 数据类型分为text(已分析)和keyword(未分析):elastic.co/blog/strings-are-dead-long-live-stringskeyword 数据类型可以在 5.2+ 中应用规范化器,因为以某种方式规范化数据通常很有用,例如小写它,同时仍然利用doc_values 底层的列数据结构。但是,规范化器仅限于生成单个令牌(如果您愿意,可以将其视为受限的 分析器)。

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


【解决方案1】:

事实证明,答案并不在于它是否流畅,而是您不能为关键字字段指定分析器,因此数据将按原样使用。

您可以看到the documentation for keywordthe documentation for text 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")
                                                   )
                                       )
                                )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 2017-04-04
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多