【问题标题】:Keyword mapping for sub document in elastic NEST弹性 NEST 中子文档的关键字映射
【发布时间】:2018-04-23 16:08:52
【问题描述】:

我现在学习用于 elasticsearch 的 Nest 6.x 客户端我想在子文档中使用术语搜索。我有这个课程:

public class BaseTest
    {
        public string Id { get; set; }

        public SubBase SubDocument { get; set; }

        public Guid TypeId { get; set; }

        public string BaseTitel { get; set; }
    }
public class SubBase
    {
        public int Id { get; set; }
        public Guid IdGuid { get; set; }
        public string Titel { get; set; }
    }

并使用此映射创建索引:

.Mappings(mp => mp
                    .Map<BaseTest>(m => m
                        .Properties(pr => pr
                            .Keyword(kw => kw
                                .Name(nm => nm.BaseTitel)))
                        .Properties(pr => pr
                            .Keyword(kw => kw
                                .Name(nm => nm.TypeId)))
                        .Properties(pr => pr
                            .Keyword(kw => kw
                                .Name(nm => nm.SubDocument.Titel)))
                        .Properties(pr => pr
                            .Keyword(kw => kw
                                .Name(nm => nm.SubDocument.IdGuid)
                            ))))

wenn 我尝试在 BaseTest 中搜索 GUID(或 GUID 格式的字符串,我将 SubBase.Titel 作为测试的 Guid 保存)值它可以在 BaseTest 中工作,但不能在 SubBase 中。 搜索我使用这个查询:

.Query(q => q
 .ConstantScore(cs => cs
  .Filter(f => f
   .Term(t => t
    .SubDocument.Titel, "5d511b8a-37c7-40c1-a5c3-4de13e16e379"))))

更新
新映射:

.Mappings(mp => mp
                    .Map<BaseTest>(m => m
                        .Properties(pr => pr
                            .Keyword(kw => kw
                                .Name(nm => nm.BaseTitel)
                                .Name(nm => nm.TypeId)
                            )
                            .Object<SubBase>(o => o
                                .Name(n => n.SubDocument)
                                .Properties(p => p
                                    .Keyword(k => k
                                        .Name(n => n.Titel)
                                        .Name(n => n.IdGuid)))))))

现在我可以找到 Guid 属性,但不是字符串类型的属性,其值类似于“5d511b8a-37c7-40c1-a5c3-4de13e16e379”

【问题讨论】:

  • 您的映射不正确。您只需调用.Properties(),然后在其中映射所有字段(.Keyword().Text() 等)。有关一些示例,请参阅映射文档:elastic.co/guide/en/elasticsearch/client/net-api/current/…
  • @RussCam 谢谢,现在我可以找到 Guid 属性了。但如果此属性具有 Guid 格式的字符串类型,则将找不到它。我该怎么办?
  • > 属性具有 Guid 格式的字符串类型 - 我不明白你的意思。你能详细说明吗? System.Guid 序列化为 string
  • SubBase.Titel = "5d511b8a-37c7-40c1-a5c3-4de13e16e379"
  • 好的,谢谢。 :-)。

标签: elasticsearch nest


【解决方案1】:

感谢拉斯卡

.Mappings(mp => mp
               .Map<BaseTest>(m => m
                 .Properties(pr => pr
                   .Keyword(kw => kw
                     .Name(nm => nm.BaseTitel))
                   .Keyword(kw => kw
                     .Name(nm => nm.TypeId))
                   .Object<SubBase>(o => o
                     .Name(n => n.SubDocument)
                       .Properties(p => p
                         .Keyword(k => k
                           .Name(n => n.Titel))
                         .Keyword(k => k
                           .Name(n => n.IdGuid)))))))

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    相关资源
    最近更新 更多