【问题标题】:How to create a multi-field mapping in elasticsearch using NEST如何使用 NEST 在 Elasticsearch 中创建多字段映射
【发布时间】:2014-08-24 03:33:59
【问题描述】:

我正在关注弹性搜索here 的教程。它不是使用 .NET,但我已经能够几乎遵循使用 NEST 讨论的所有内容。我已经了解了有关映射的部分,但我不知道如何使用 NEST 表示下面的请求

curl -XPUT "http://localhost:9200/movies/movie/_mapping" -d'
{
   "movie": {
      "properties": {
         "director": {
            "type": "multi_field",
            "fields": {
                "director": {"type": "string"},
                "original": {"type" : "string", "index" : "not_analyzed"}
            }
         }
      }
   }
}'

我到处寻找解决方案,我能得到的最接近的是stack overflow question

我如何实现这一目标? 我还将感谢指向完整初学者到弹性搜索的网站的链接,并提供我可以遵循的示例。

【问题讨论】:

  • 是否有特殊原因需要声明此映射?从这些字段的外观来看,Elasticsearch 可能会默认执行您需要的操作。您是否尝试过仅对文档进行索引,然后检查 Elasticsearch 的功能?
  • 它来自我在上面链接中关注的教程。他们解释说字符串属性(在这种情况下,我们正在保存电影,它是导演字段),值被分解为单个单词,并且使用多个单词进行搜索将不会产生任何结果。我实际上已经证实了这一点。解决方案是将该字段设置为 multi_field,如上面的代码所示。我只是不确定如何在 NEST 中执行此操作。

标签: .net elasticsearch nest elasticsearch-net


【解决方案1】:

与映射相关的 NEST 的最佳示例/文档是查看源代码中的此文件FluentMappingFullExampleTests.cs

以该文件为例,如果您在项目中声明了相应的Movie 类,则可以执行以下操作

 var result = this._client.Map<Movie>(m => m
     .Properties(props => props
        .MultiField(s => s
            .Name(p => p.Name)
            .Fields(pprops => pprops
                        .String(ps => ps.Name(p => p.Name).Index(FieldIndexOption.Analyzed))
                        .String(ps => ps.Name("original").Index(FieldIndexOption.NotAnalyzed))
                )
             )
         )
     )

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-12-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多