更新以显示工作示例
我正在尝试对ElasticSearch中的用户名集合进行部分搜索。
到处搜索已经为我指明了nGram Tokenizer
方向,但是我为正确的实施而感到困惑,但未获得任何结果。
这是我正在从事的项目中剥离的相关代码。
我尝试了不同的组合和搜索类型,但无济于事。
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);
Profile.cs
public class Profile
{
public string Id { get; set; }
[ElasticProperty(IndexAnalyzer = "mynGram")]
public string Username { get; set; }
}
任何提示将不胜感激。
从nGram令牌过滤器上的es文档中了解一下:
"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" ]
}
}
}
}
注意事项
您需要添加mynGram
到分析仪中,否则将无法使用。他们的工作方式就是这样。每个索引字段都应用了一个分析器,一个分析器是 一个 标记器,后跟 零个或多个 标记过滤器。您已经定义了一个不错的nGram标记生成器(mynGram
)来使用,但是您没有在中使用它customAnalyzer
,而是使用了standard
标记生成器。(基本上,您只是在定义但从未使用过mynGram
。)
您需要告诉elasticsearch customAnalyzer
在您的映射中使用您的: "properties": {"string_field": {"type": "string", "index_analyzer": customAnalyzer" }}
您应该将更maxGram
改为更大的数字(可能是10),否则4个字母的搜索将不会完全像自动完成一样(或可能不返回任何值,具体取决于搜索时间分析器)。
使用_analyze
api端点测试您的分析器。东西线这应该工作。
curl -XGET’http:
//yourserver.com
:9200?index_name/_analyze?analyzer=customAnalyzer’-d’rlewis’
祝好运!
问题内容: 我开始四处寻找搜索引擎,经过一番阅读后,我决定使用ElasticSearch(这是非常了不起的:)),我的项目在C#中,所以我四处寻找客户端并开始使用NEST,一切都很简单,但是我搜索部分有些混乱。 我想搜索 特定类型的 所有字段 ,然后 输入 以下代码: 我看到许多字符串查询搜索已被弃用,并想确保上面的方法是正确的方式(上面未标记为已弃用…)对于一个简单的任务来说也有点长,所以也许有
问题内容: 如何使用Mpdreamz / NEST Elasticsearch客户端基于嵌套字段的属性列出构面? 我检查了Nest文档,但不清楚如何执行。 这是我尝试的代码: 由于构面,我得到: 体裁(842) 98(47) 51(30) 24(29) 46(28) 虽然我希望得到类似的东西: 类型1(842) 体裁2(47) 类型3(30) 类型4(29) 类型5(28) 我做错了什么?在哪里检
我正在准备一个带有elasticsearch的站内搜索引擎,我是elasticsearch的新手。将使用此引擎的站点为土耳其语/英语。 在土耳其,我们有像 'ğ', 'ü', 'ş', 'ı', 'ö', 'ç'. 这样的土耳其字母,但是当我们通常搜索时,我们会使用字母“g”、“u”、“s”、“i”、“o”、“c”。这不是一个规则,但我们通常会这样做,像习惯一样思考,这是我们过去习惯的。 现在,我
问题内容: 我正在准备一个带有Elasticsearch的现场搜索引擎,并且是Elasticsearch的新手。使用此引擎的网站为 土耳其语/英语 。 在土耳其,我们有土耳其字母,例如 “ğ”,“ü”,“ş”,“ı”,“ö”,“ç” 。但是,当我们通常搜索时,我们使用字母 ‘g’,’u’,’s’,’i’,’o’,’c’ 。 这不是规则,但我们通常会这样做,就像习惯一样,这是我们以前习惯的。 现在,
问题内容: 我是Redis的新手,并试图找出一种简单的方法将Redis用作C#应用程序的本地缓存。我已经从https://github.com/MSOpenTech/redis/releases下载并运行redis服务器 我可以成功存储键值并按以下方式检索它: 我想限制Redis在我的服务器上使用的内存量,我也想让Redis在内存填满时自动清除值。我尝试了maxmemory命令,但是在redus-
简介 TensorFlow Serving官方提供Inception模型的C++ gRPC client,可以参考 https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/inception_client.cc 。