嵌套和弹性搜索 - 映射

时间:2014-03-10 18:27:51

标签: c# elasticsearch nest

我正在尝试将多个分析仪映射到弹性类型的字段中。如果我使用ElasticAttribute来映射分析器:

[ElasticProperty(Analyzer = "fulltext")]
public string LongDescription { get; set; }

我看看我得到的请求:

"name": {
      "type": "string",
      "analyzer": "fulltext"
    },

为了将多个分析仪映射到同一个字段,我使用Fluent映射并添加一个多字段:

.Properties(prop => prop
                    .MultiField(mf => mf
                        .Name(p => p.Name)
                        .Fields(f => f
                            .String(
                                s =>
                                    s.Name(n => n.Name)
                                        .IndexAnalyzer("autocomplete_analyzer")
                                        .IncludeInAll(false)
                                        .Index(FieldIndexOption.not_analyzed))
                            .String(
                                s =>
                                    s.Name(n => n.Name)
                                        .IndexAnalyzer("fulltext")
                                        .IncludeInAll(false)
                                        .Index(FieldIndexOption.not_analyzed))
                        )
                    )
                )

生成的请求如下所示:

 "name": {
      "type": "multi_field",
      "fields": {
        "name": {
          "type": "string",
          "index": "not_analyzed",
          "index_analyzer": "autocomplete_analyzer",
          "include_in_all": false
        },
        "name": {
          "type": "string",
          "index": "not_analyzed",
          "index_analyzer": "fulltext",
          "include_in_all": false
        }
      }
    },

我对“analyzer”/“index_analyzer”属性特别感兴趣。通过流畅的映射,我只能设置IndexAnalyzer或SearchAnalyzer。我理解IndexAnalyzer和SearchAnalyzer之间的区别,但是当我使用ElasticAttribute时,“analyzer”属性是什么?这只是意味着索引和搜索设置相同吗?

1 个答案:

答案 0 :(得分:3)

仅指定analyzer确实同时设置了index_analyzersearch_analyzeranalyzer是一个弹性搜索属性,而不是NEST的一些神奇行为。

fluent映射缺少.Analyzer()方法,现在已添加到1.0!