[英].NET Elastic Search Create NGram Index
我正在嘗試將彈性搜索設置為可能使用它的項目的原型。 該項目需要查看數據集的內容並使其可搜索。
我現在擁有的是以下內容:
現在缺少的是:
這意味着我可以通過搜索“Sofia”、“sofia”、“anderson”或“canada”從我的數據庫中找到這個示例數據集,但不能通過搜索“canad”。
{“id”:46,“firstName”:“Sofia”,“lastName”:“Anderson”,“country”:“Canada”}
我正在使用“Elastic.Clients.Elasticsearch”NuGet package 創建我的索引。 我嘗試使用 NGram-Tokenizer 創建索引並將其應用於所有字段。 這似乎在某種程度上不起作用。
這是我用來創建索引的代碼:
Client.Indices.Create(IndexName, c => c
.Settings(s => s
.Analysis(a => a
.Tokenizer(t => t.Add(TokenizerName, new Tokenizer(new TokenizerDefinitions(new Dictionary<string, ITokenizerDefinition>() { { TokenizerName, ngram } }))))
.Analyzer(ad => ad
.Custom(AnalyzerName, ca => ca
.Tokenizer(TokenizerName)
)
)
)
)
.Mappings(m => m
.AllField(all => all
.Enabled()
.Analyzer(AnalyzerName)
.SearchAnalyzer(AnalyzerName)
)
)
);
和
private string TokenizerName => "my_tokenizer";
private string AnalyzerName => "my_analyzer";
和
var ngram = new NGramTokenizer() { MinGram = 3, MaxGram = 3, TokenChars = new List<TokenChar>() { TokenChar.Letter }, CustomTokenChars = "" };
使用此代碼,我得到了上述行為。
我的代碼有錯誤嗎? 我錯過了什么嗎? 您需要更多信息嗎?
提前致謝
保羅
我沒有找到在 .NET 中運行它的方法。
但是,對我有用的是使用此 API 調用創建索引:
URL:
https://{{elasticUrl}}/{{indexName}}
身體:
{
"mappings": {
"properties": {
"firstName": {
"type":"text",
"analyzer":"index_ngram",
"search_analyzer":"search_ngram"
},
"lastName": {
"type":"text",
"analyzer":"index_ngram",
"search_analyzer":"search_ngram"
},
"country": {
"type":"text",
"analyzer":"index_ngram",
"search_analyzer":"search_ngram"
}
}
},
"settings": {
"index": {
"max_ngram_diff":50
},
"analysis": {
"filter": {
"ngram_filter": {
"type": "ngram",
"min_gram": 2,
"max_gram": 25
}
},
"analyzer": {
"index_ngram": {
"type": "custom",
"tokenizer": "keyword",
"filter": [ "ngram_filter", "lowercase" ]
},
"search_ngram": {
"type": "custom",
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
}
}
這導致 NGram 的字段長度為 2 到 25:firstName、lastName、country。
我希望這對將來的某人有所幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.