【问题标题】:Elastic nest accessing sub property of text type弹性嵌套访问文本类型的子属性
【发布时间】:2019-01-02 07:14:52
【问题描述】:

我已经创建了文本属性 name 我还创建了子属性作为 words_count of name 并且我希望对 word_count 的名称进行范围查询。如何使用 Nest 在 c# 中访问它。

"mappings": {
"person": {
  "properties": {
    "name": { 
      "type": "text",
      "fields": {
        "keyword": { 
          "type": "keyword"
        },
        "words_count": { 
          "type": "token_count",
          "analyzer": "standard"
        },
        "length": { 
          "type": "token_count",
          "analyzer": "character_analyzer"
        }
      }
    }
  }
}
}

我有名字的长度,但它来自 c# 字符串长度。我想访问在弹性中创建的名称的 words_count 子属性。

c# code

Func<QueryContainerDescriptor<MyType>, QueryContainer> query = m => m
                                    .Range(r => r.Field(f => f.name.words_count).Relation(RangeRelation.Within)
                                    .GreaterThanOrEquals(10).LessThanOrEquals(14));

我想替换弹性嵌套中的 f.name.words_count。我是否需要为具有属性长度的名称创建类。

【问题讨论】:

    标签: elasticsearch range nest


    【解决方案1】:

    您无需创建 POCO 属性即可映射到 multi-field(通常也称为 fieldssub-fields)。

    它们是能够以多种不同方式索引单个输入的功能,这在搜索用例中非常常见。例如,使用多种不同类型的分析来索引街道地址。

    您可以使用.Suffix(...) 扩展方法来引用multi-field

    Func<QueryContainerDescriptor<MyType>, QueryContainer> query = m => m
        .Range(r => r
            .Field(f => f.name.Suffix("words_count"))
            .Relation(RangeRelation.Within)
            .GreaterThanOrEquals(10)
            .LessThanOrEquals(14)
        );
    

    【讨论】:

      猜你喜欢
      • 2019-03-12
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 2011-06-12
      相关资源
      最近更新 更多