【问题标题】:Proper way to do multi field with NEST使用 NEST 进行多字段的正确方法
【发布时间】:2014-07-02 06:29:20
【问题描述】:

我想用 NEST 实现全文搜索和标记化搜索,所以我想得到这样的多字段:

     "tweet": {
        "properties": {
           "message": {
              "type": "string",
              "store": true,
              "fields": {
                 "raw": {
                    "type": "string",
                    "index": "not_analyzed"
                 }
              }
           }
        }
     }

目前,我与 NEST 的映射是

[ElasticType(Name = "tweet")]
internal class Tweet
{
    [ElasticProperty(Name = "message")]
    public string Message { get; set; }
}

我在 NEST 和 ElasticSearch.net 上的文档中进行了搜索,但没有任何结果。

是否有任何选项可以自动在字段中获取原始字段,或者我应该定义一个嵌套类并指定自己的原始字段(我更喜欢更简洁的方式)?

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    结帐this answer

    基本上,你可以这样做:

    client.CreatIndex("tweets", c => c
        .AddMapping<Tweet>(m => m
            .MapFromAttributes()
            .Properties(props => props
                .MultiField(mf => mf
                    .Name(t => t.Message)
                    .Fields(fs => fs
                        .String(s => s.Name(t => t.Message).Analyzer("standard"))
                        .String(s => s.Name(t => t.Message.Suffix("raw")).Index(FieldIndexOption.not_analyzed)))))));
    

    【讨论】:

    • 感谢您的回答(对于我迟到的回答感到抱歉)。当我创建这样的索引时它运行良好,但是您是否知道如何使用连接的客户端和已创建的索引来做到这一点?我定义了一个名为 Raw 的新属性并将其添加到基于属性的映射中。我遍历类型 Tweet 并检查是否存在原始属性,然后我想让它成为多字段。
    • nest.azurewebsites.net/indices/put-mapping.html TypeMapping 示例看起来很完美,但它不再起作用了。不再引用 TypeMapping
    • 您使用的是哪个版本的 NEST? API 在新版本中发生了很大变化,文档需要更新。无论如何,您仍然需要使用新映射重新索引数据,因此重新创建索引可能也是值得的。
    • 我使用最新版本的 NEST(nuget 包)。我自己在另一个线程中找到了答案,我认为我正在取得进展。 ESclient.Map(m => m.Index(indexName).MapFromAttributes().Properties(p => EnsureRawMapping()));我目前正在做类似的事情,我仍然需要弄清楚如何遍历我的属性并在需要的地方创建多字段。
    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    相关资源
    最近更新 更多