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

时间:2014-05-08 20:55:57

标签: elasticsearch nest

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

例如,如果我有一个音乐json对象并且想要根据类型组织构面结果,我希望将每个类型视为整个类型术语(节奏和蓝调),而不是一个方面的节奏和'节奏& #39;还有一个用于布鲁斯',我希望能够搜索节奏和布鲁斯'并让它与Rhythm和Blues'相匹配(通知案例)。

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

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

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

[ElasticProperty(Analyzer = "tokenizer, lowercase"]
public string Genre { get; set; }

1 个答案:

答案 0 :(得分:1)

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

对于像这样的更高级的映射,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)))))));

希望这有帮助!