Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C#NEST客户端指定并使用NGramTokenizer进行弹性搜索_C#_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

通过C#NEST客户端指定并使用NGramTokenizer进行弹性搜索

通过C#NEST客户端指定并使用NGramTokenizer进行弹性搜索,c#,elasticsearch,nest,C#,elasticsearch,Nest,更新以显示工作样本 我试图在ElasticSearch中对一组用户名进行部分搜索 四处搜索已经将我指向了nGram标记器的方向,但是我在正确的实现上遇到了困难,没有得到任何结果 这是从我正在工作的项目中删除的相关代码 我尝试过不同的组合和搜索类型,但都无济于事 setup.cs var client = new ElasticClient(settings.ConnectionSettings); // (Try and) Setup the nGram tokenizer. var inde

更新以显示工作样本

我试图在ElasticSearch中对一组用户名进行部分搜索

四处搜索已经将我指向了nGram标记器的方向,但是我在正确的实现上遇到了困难,没有得到任何结果

这是从我正在工作的项目中删除的相关代码

我尝试过不同的组合和搜索类型,但都无济于事

setup.cs

var client = new ElasticClient(settings.ConnectionSettings);

// (Try and) Setup the nGram tokenizer.
var indexSettings = new IndexSettings();
var custonAnalyzer = new CustomAnalyzer();

customAnalyzer.Tokenizer = "mynGram";
customAnalyzer.Filter = new List<string> { "lowercase" };

indexSettings.Analysis.Analyzers.Add("mynGram", customAnalyzer);

indexSettings.Analysis.Tokenizers.Add("mynGram", new NGramTokenizer
                                                    {
                                                        MaxGram = 10,
                                                        MinGram = 2
                                                    });

client.CreateIndex(settings.ConnectionSettings.DefaultIndex, indexSettings);

client.MapFromAttributes<Profile>();

// Create and add a new profile object.
var profile = new Profile
                  {
                      Id = "1",
                      Username = "Russell"
                  };


client.IndexAsync(profile);

// Do search for object
var s = new SearchDescriptor<Profile>().Query(t => t.Term(c => c.Username, "russ"));

var results = client.Search<Profile>(s);
public class Profile
{
    public string Id { get; set; }

    [ElasticProperty(IndexAnalyzer = "mynGram")]
    public string Username { get; set; }
}
任何提示都将不胜感激。

请从以下位置查看:

需要注意的几件事

  • 您需要将
    mynGram
    添加到分析仪中,否则将无法使用。他们的工作方式是这样的。每个索引字段都有一个应用于它的分析器,分析器是一个标记化器,后跟零个或多个标记过滤器。您已经定义了一个很好的nGram标记器(
    mynGram
    )来使用,但是您没有在
    customAnalyzer
    中使用它,它正在使用
    标准的标记器。(基本上,您只是在定义,但从未使用
    mynGram

  • 您需要告诉elasticsearch在映射中使用
    customAnalyzer
    “属性”:{“字符串\字段”:{“类型”:“字符串”,“索引\分析器”:customAnalyzer}

  • 您应该将
    maxGram
    更改为一个更大的数字(可能是10),否则4个字母的搜索将不会完全像自动完成(或者可能什么也不返回,取决于搜索时间分析器)

  • 使用
    \u analyze
    api端点来测试您的分析器。这应该是可行的

    curl-XGET'-d'rlewis'


  • 祝你好运!

    而且它似乎神奇地起了作用。我将更新示例以显示一个固定版本,以供将来参考。感谢您的指导。
        "settings" : {
            "analysis" : {
                "analyzer" : {
                    "my_ngram_analyzer" : {
                        "tokenizer" : "my_ngram_tokenizer"
                    }
                },
                "tokenizer" : {
                    "my_ngram_tokenizer" : {
                        "type" : "nGram",
                        "min_gram" : "2",
                        "max_gram" : "3",
                        "token_chars": [ "letter", "digit" ]
                    }
                }
            }
        }