指定和使用NGramTokenizer与C#NEST客户端进行弹性搜索已更新以显示工作示例部分搜索。四处搜索为我指出了nGramTokenizer的方向,但我在正确的实现中使用了nGramTokenizer,但没有得到任何结果。这是从我正在处理的项目中删除的相关代码。我尝试了不同的组合和搜索类型,但均无济于事。setup.csvarclient=newElasticClient(settings.ConnectionSettings);//(尝试并)设置nGram分词器。varindexSettings=newIndexSettings();varcustonAnalyzer=newCustomAnalyzer();customAnalyzer.Tokenizer="mynGram";customAnalyzer.Filter=newList{"lowercase"};indexSettings.Analysis.Analyzers.Add("mynGram",customAnalyzer);indexSettings.Analysis.Tokenizers.Add("mynGram",newNGramTokenizer{MaxGram=10,MinGram=2});client.CreateIndex(settings.ConnectionSettings.DefaultIndex,indexSettings);客户端.MapFromAttributes();//创建并添加一个新的配置文件对象。varprofile=newProfile{Id="1",Username="Russell"};client.IndexAsync(配置文件);//搜索对象vars=newSearchDescriptor().Query(t=>t.Term(c=>c.Username,"russ"));varresults=client.Search(s);Profile.cspublicclassProfile{publicstringId{get;放;}[ElasticProperty(IndexAnalyzer="mynGram")]publicstring用户名{得到;放;}}任何提示将不胜感激从esdocsonnGramtokenfilter看看这个:,"tokenizer":{"my_ngram_tokenizer":{"type":"nGram","min_gram":"2","max_gram":"3","token_chars":["letter","digit"]}}需要注意的几件事你需要将mynGram添加到你的分析器中,否则它不会被使用。他们的工作方式是这样的。每个索引字段都应用了一个分析器,它是一个分词器,后跟零个或多个分词过滤器。您已经定义了一个工作正常的nGram分词器(mynGram),但您没有在customAnalyzer中使用它,它使用的是标准分词器。(基本上你只是定义但从不使用mynGram。)你需要告诉customAnalyzer在你的映射中使用你的customAnalyzer:您应该将maxGram更改为更大的数字(可能是10),否则4个字母的搜索将无法像自动完成一样工作(或者不返回任何内容,具体取决于搜索时间分析器)。使用_analyzeapi端点来测试您的分析器。这一行应该工作。curl-XGET'http://yourserver.com:9200?index_name/_analyze?analyzer=customAnalyzer'-d'rlewis'祝你好运!以上就是C#学习教程:指定和使用NGramTokenizerwithC#NESTclientforElasticSearch分享的全部内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络合集,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处:
