使用NEST

时间:2019-03-11 01:44:56

标签: c# elasticsearch 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")
                        )
                    )
                )
            )
        );

这是我的查询(是的,我只想返回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”的任何行中获得结果,应通过停用词将其过滤掉。

1 个答案:

答案 0 :(得分:0)

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

MsgBox(c.ExecuteNonQuery > 0, "Update Success! Acctid " & acctid.Text, "Update Failed!")