gpt4 book ai didi

c# - Elasticsearch + NEST : Use token-filter only for comparisation but not on analyzers result

转载 作者:行者123 更新时间:2023-12-02 22:21:25 24 4
gpt4 key购买 nike

我想在 elasticsearch 中构建一个分析器,它在比较时忽略其输入的情况,但返回区分大小写的结果。

这是我的实际状态:

我的 NEST 代码来创建分析器

{ "MySynonymFilter", new SynonymTokenFilter { SynonymsPath = "Path/SynonymFile.txt", Lenient = true} },

{
"MySynonymizer", new CustomAnalyzer
{
Tokenizer = "whitespace",
Filter = new List<string> {"lowercase", "MySynonymFilter"}
}
},

这是上面创建的分析器的样子:
"Synonymizer": {
"filter": [
"lowercase",
"MySynonymFilter"
],
"type": "custom",
"tokenizer": "whitespace"
},

我的同义词文件(“路径/同义词文件.txt”):
one, two, three, four => FIVE

这是实际结果和期望结果:

示例查询:
localhost:port/index/_analyze
{
"analyzer": "MySynonymizer",
"text": "Input"
}

实际结果:
Input: "one"              Output: ["five"]
Input: "One tWo THREE" Output: ["five", "five", "five"]
Input: "one TWO foo" Output: ["five", "five", "foo"]

删除小写过滤器后的结果:
Input: "one"              Output: ["FIVE"]
Input: "One tWo THREE" Output: ["One", "tWo", "THREE"]
Input: "one TWO foo" Output: ["FIVE", "TWO", "foo"]

想要的结果:
Input: "one"              Output: ["FIVE"]
Input: "One tWo THREE" Output: ["FIVE", "FIVE", "FIVE"]
Input: "one TWO foo" Output: ["FIVE", "FIVE", "foo"]

最佳答案

请注意 Analyze API对输入的文本进行分析并返回 代币 .这些标记是分析器的输出,但这些是 不是最终输出 ,我们将使用这些标记来执行实际搜索。

您可以使用 ignore_case 在早期版本的 Elasticsearch 中实现您想要的功能。范围:

PUT /test_index
{
"settings": {
"index" : {
"analysis" : {
"filter" : {
"synonym" : {
"type" : "synonym",
"lenient": true,
"ignore_case": "true", // <-- deprecated
"synonyms" : ["one, two, three => FIVE"]
}
}
}
}
}
}

然后你可以在不使用 "lowercase" 的情况下分析文本 token 过滤器:
GET /test_index/_analyze
{
"tokenizer" : "whitespace",
"filter" : ["synonym"] ,
"text" : "One two three" // --> result: "FIVE", "FIVE", "FIVE"
}

所以你的同义词会忽略大小写,分析器不会将任何内容转换为小写...但是 ignore_case已被弃用。如果您尝试使用此代码,您将收到以下消息:

Deprecation: The ignore_case option on the synonym_graph filter is deprecated. Instead, insert a lowercase filter in the filter chain before the synonym_graph filter.



您想要实现的目标不再可能(这是有道理的)。如果您的搜索区分大小写,那么您的同义词也区分大小写...如果您想忽略大小写,请使用 "lowercase" token 过滤器...

关于c# - Elasticsearch + NEST : Use token-filter only for comparisation but not on analyzers result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59988980/

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