Установка not_analyzed для свойства в Nest 5.5.0
Я попытался установить тип индекса not_analyzed через Nest 5.5.0, и я не знаю, как это сделать.
Мой инициал:
var map = new CreateIndexDescriptor(INDEX_NAME)
.Mappings(ms => ms.Map<Project>(m => m.AutoMap()));
var connectionSettings = new ConnectionSettings().DefaultIndex(INDEX_NAME);
_client = new ElasticClient(connectionSettings);
_client.Index(map);
И класс проекта:
[ElasticsearchType(Name = "project")]
public class Project
{
public Guid Id { get; set; }
[Text(Analyzer = "not_analyzed")]
public string OwnerIdCode { get; set; }
}
Этот способ init создает какое-то странное отображение после того, как я вызываю index/_mapping REST через Postman. Там есть нормальный раздел "сопоставления" JSON, чуть ниже "createindexdescriptor" с почти такими же данными.
"examinations4": {
"mappings": {
"project": {
(...)
},
"createindexdescriptor": {
"properties": {
"mappings": {
"properties": {
"project": {
"properties": {
"properties": {
"properties": {
"id": {
"properties": {
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"ownerIdCode": {
"properties": {
"analyzer": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
(...)
1 ответ
Решение
Чтобы установить не анализируемое строковое поле в Elasticsearch 5.0+, вы должны использовать keyword
введите и передайте отображение либо во время создания индекса с CreateIndex()
или перед отправкой первого документа в индекс с помощью Map<T>()
, В вашем случае, я думаю, что вы ищете что-то вроде
void Main()
{
var connectionSettings = new ConnectionSettings()
.DefaultIndex("default-index");
var client = new ElasticClient(connectionSettings);
client.CreateIndex("projects", c => c
.Mappings(m => m
.Map<Project>(mm => mm
.AutoMap()
)
)
);
}
[ElasticsearchType(Name = "project")]
public class Project
{
[Keyword]
public Guid Id { get; set; }
[Keyword]
public string OwnerIdCode { get; set; }
}
я думаю Id
свойство также должно быть помечено как тип ключевого слова.