如何在Nest for Elasticsearch中添加完整的短语标记器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (32)

当我使用facet创建搜索时,我希望facet结果在整个短语上,而不是单个单词。我希望它不区分大小写 - 因为'not_analyzed'会这样做。

例如,如果我有一个音乐json对象,并希望根据类型组织构面结果,我希望将每个类型视为整个类型术语(节奏和蓝调),而不是“节奏”的一个方面和“蓝调”的一个方面',我希望能够搜索'节奏和蓝调',并将其与“节奏和蓝调”(通知案例)相匹配。

似乎elasticsearch文档建议使用标记化器和小写过滤器的自定义分析器。

这是我提到的elasticsearch的建议:(中页) http://www.elasticsearch.org/blog/starts-with-phrase-matching/

我希望能够说出类似的内容(在我的伪代码中的POCO中):

[ElasticProperty(Analyzer = "tokenizer, lowercase"]
public string Genre { get; set; }
提问于
用户回答回答于

在映射中使用多字段类型。这样做将允许您以两种方式索引流派字段 - 分析(使用标准或小写分析器)进行搜索,而不是分析分面。

对于像这样的更高级的映射,NEST中基于属性的映射不会削减它。您必须使用流畅的API,例如:

client.CreatIndex("songs", c => c
.AddMapping<Song>(m => m
    .MapFromAttributes()
    .Properties(props => props
        .MultiField(mf => mf
            .Name(s => s.Genre)
            .Fields(f => f
                .String(s => s.Name(o => o.Genre).Analyzer("standard"))
                .String(s => s.Name(o => o.Genre.Suffix("raw")).Index(FieldIndexOption.not_analyzed)))))));

希望这可以帮助!

扫码关注云+社区

领取腾讯云代金券