首页 > 解决方案 > 如何让关键字映射在 NEST 中工作?

问题描述

我在 NEST v6.3.1,ElasticSearch v6.4.2

我无法让我的字段被索引为关键字。

我已经尝试了这两个属性:

[Keyword]
public string Suburb { get; set; }

流利的:

client.CreateIndex(indexName, i => i
                .Mappings(ms => ms
                    .Map<Listing>(m => m
                        .Properties(ps => ps
                            .Keyword(k => k
                                .Name(n => n.Suburb)))
                        .AutoMap())
                    .Map<Agent>(m => m
                        .AutoMap())
                    .Map<BuildingDetails>(m => m
                        .AutoMap())
                    .Map<LandDetails>(m => m
                        .AutoMap())
                )
            );

两者都导致相同的事情:

{
  "listings": {
    "mappings": {
      "listing": {
        "properties": {          
          "suburb": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

例如与我在这里看到的不匹配: https ://www.elastic.co/guide/en/elasticsearch/client/net-api/current/attribute-mapping.html

当我尝试使用[GeoPoint]. 应该是 geopoint 类型,但它映射到浮点数:

"latLong": {
            "properties": {
              "lat": {
                "type": "float"
              },
              "lon": {
                "type": "float"
              }
            }
          }

所以我错过了一些东西,只是不确定是什么。

有什么帮助吗?

谢谢

标签: elasticsearchnest

解决方案


索引可能已经存在,并且无法更新字段映射。检查.IsValidcreate index 调用的响应,如果无效,请查看错误和原因。您可能需要删除索引并重新创建。

另请注意,在 Elasticsearch 6.x 中不允许在一个索引中使用多个类型映射,并且会失败。为不同类型创建单独的索引,或者,如果类型具有相同的字段结构并且您希望以相同的方式索引/分析它们,您可以考虑引入额外的鉴别器字段。


推荐阅读