gpt4 book ai didi

elasticsearch - token 字符映射到 Ngram 过滤器 ElasticSearch NEST

转载 作者:行者123 更新时间:2023-11-29 02:54:23 25 4
gpt4 key购买 nike

我正在尝试使用 NEST 复制以下映射,但在将 token 字符映射到分词器时遇到问题。

{
"settings": {
"analysis": {
"filter": {
"nGram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding",
"nGram_filter"
]
}
}
}
}

我能够复制除 token 字符部分以外的所有内容。有人可以帮助这样做吗?下面是我复制上述映射的代码。 ( token 字符部分除外)

 var nGramFilters1 = new List<string> { "lowercase", "asciifolding", "nGram_filter" };
var tChars = new List<string> { "letter", "digit", "punctuation", "symbol" };

var createIndexResponse = client.CreateIndex(defaultIndex, c => c
.Settings(st => st
.Analysis(an => an
.Analyzers(anz => anz
.Custom("nGram_analyzer", cc => cc
.Tokenizer("whitespace").Filters(nGramFilters1)))
.TokenFilters(tf=>tf.NGram("nGram_filter",ng=>ng.MinGram(2).MaxGram(20))))));

引用资料

  1. SO Question
  2. GitHub Issue

最佳答案

NGram Tokenizer 支持标记字符 (token_chars),使用它们来确定哪些字符应保留在标记中,并根据列表中未显示的任何字符进行拆分。

NGram Token Filter 另一方面,它对标记器生成的标记进行操作,因此只有应生成的最小和最大克数的选项。

根据您当前的分析链,您可能需要如下内容

var createIndexResponse = client.CreateIndex(defaultIndex, c => c
.Settings(st => st
.Analysis(an => an
.Analyzers(anz => anz
.Custom("ngram_analyzer", cc => cc
.Tokenizer("ngram_tokenizer")
.Filters(nGramFilters))
)
.Tokenizers(tz => tz
.NGram("ngram_tokenizer", td => td
.MinGram(2)
.MaxGram(20)
.TokenChars(
TokenChar.Letter,
TokenChar.Digit,
TokenChar.Punctuation,
TokenChar.Symbol
)
)
)
)
)
);

关于elasticsearch - token 字符映射到 Ngram 过滤器 ElasticSearch NEST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38065966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com