【发布时间】: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-strings。keyword数据类型可以在 5.2+ 中应用规范化器,因为以某种方式规范化数据通常很有用,例如小写它,同时仍然利用doc_values底层的列数据结构。但是,规范化器仅限于生成单个令牌(如果您愿意,可以将其视为受限的 分析器)。
标签: c# .net elasticsearch nest elasticsearch-analyzers