gpt4 book ai didi

elasticsearch - 将word_delimiter与edgeNGram一起使用会忽略Word_Delimiter token

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

我有以下自定义分析器。但是我不明白如何实现我的目标。

我的目标是我要用空格分隔倒排索引,但我也要在用户输入最少3个字符后具有自动完成功能。为此,我虽然将word_delimiter和edgeNGram token 组合如下

{
"settings": {
"index": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "whitespace",
"filter": [
"standard",
"lowercase",
"my_word_delimiter",
"my_edge_ngram_analyzer"
],
"type": "custom"
}
},
"filter": {
"my_word_delimiter": {
"catenate_all": true,
"type": "word_delimiter"
},
"my_edge_ngram_analyzer": {
"min_gram": 3,
"max_gram": 10,
"type": "edgeNGram"
}
}
}
}
}
}

这将为“Brother TN-200”提供如下结果。但是我期望“tn”也包含在还原索引中,因为我有word_delimiter token 。为什么不在倒排索引中?我该如何实现?
curl -XGET "localhost:9200/myIndex/_analyze?analyzer=my_analyzer&pr
etty=true" -d "Brother TN-200"
{
{
"token" : "bro",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "brot",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "broth",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "brothe",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "brother",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "tn2",
"start_offset" : 22,
"end_offset" : 28,
"type" : "word",
"position" : 3
}, {
"token" : "tn20",
"start_offset" : 22,
"end_offset" : 28,
"type" : "word",
"position" : 3
}, {
"token" : "tn200",
"start_offset" : 22,
"end_offset" : 28,
"type" : "word",
"position" : 3
}, {
"token" : "200",
"start_offset" : 25,
"end_offset" : 28,
"type" : "word",
"position" : 4
}]
}

更新:

当然,如果我使用“min_gram”:2,则“tn”将位于还原索引中,但我不希望这样做,因为如果任何其他单词在该单词中包含“tn”,它将出现在结果列表中。
例如关于“hp”关键字。我正在为“惠普”获得产品,因为我的产品就像“hp xxx”,但我也得到了一个名为“tech hpc”的产品。在输入“hpc”之前,我不希望显示该产品。这就是我设定3。

如果我不使用edgeNGram标记程序,而仅使用word_delimiter,则“tn”在反转索引中,因为Brother TN-200将被索引为brother,tn和200。这就是为什么我希望word_delimiter使“tn”成为反转索引。如果将它与edgeNGram一起使用,它没有用吗? –

最佳答案

my_edge_ngram_analyzer中,min_gram设置为3,因此任何长度小于3个代码点的 token 都不会显示。
如果要显示TN,则需要将其设置为2。

例:

get <my_index>/_analyze?tokenizer=whitespace&filters=my_edge_ngram_analyzer&text=TN

上面的调用将返回0个 token 。

关于elasticsearch - 将word_delimiter与edgeNGram一起使用会忽略Word_Delimiter token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35868172/

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