使用 NEST 为 ElasticSearch 配置标准停用词

Configure standard stop words for ElasticSearch using NEST

我在使用 NEST 客户端在 ElasticSearch 中配置停用词时遇到问题。这是我的索引定义:

            var createIndexResponse = _client.CreateIndex(IndexName, c => c
            .Settings(s => s
                .Analysis(a => a
                    .Analyzers(aa => aa.Stop("pfstop", st => st.StopWords("_english_"))
                    )
                )
            )
            .Mappings(m => m
                .Map<SearchTopic>(mm => mm
                    .Properties(p => p
                        .Text(t => t
                            .Name(n => n.Posts)
                            .Name(n => n.FirstPost)
                            .Name(n => n.Title)
                            .SearchAnalyzer("pfstop")
                        )
                    )
                )
            )
        );

这是我的查询(是的,我只想 return ID):

            var searchResponse = _client.Search<SearchTopic>(s => s
            .Source(sf => sf.Includes(i => i.Fields(f => f.Id)))
            .Query(q => q.MultiMatch(m => m.Query(searchTerm)
                .Fields(f => f
                    .Field(x => x.Title, boost: 20)
                    .Field(x => x.FirstPost, boost: 2)
                    .Field(x => x.Posts))))
            .Take(pageSize)
            .Skip(startRow));

如果我的 searchTerm 是 "Simon and Diana,",我会从任何包含 "and" 的行中获取结果,这些结果应该通过停用词过滤掉。

流畅的语法再次来袭。经过一些实验,从映射中仅包含一个字段开始,我了解到您必须拆分字段及其分析器配对。正确的语法是这样的:

                .Mappings(m => m
                .Map<SearchTopic>(mm => mm
                    .Properties(p => p
                        .Text(t => t
                            .Name(n => n.Posts)
                            .Analyzer("pfstop")
                        )
                        .Text(t => t
                            .Name(n => n.FirstPost)
                            .Analyzer("pfstop")
                        )
                        .Text(t => t
                            .Name(n => n.Title)
                            .Analyzer("pfstop")
                        )
                    )
                )
            )