gpt4 book ai didi

tokenize - Elasticsearch - 如何在使用小写过滤器时保留大写首字母缩略词?

转载 作者:行者123 更新时间:2023-12-04 17:57:58 25 4
gpt4 key购买 nike

在 Elasticsearch 2.x 中,我如何区分首字母缩略词“CAN”和常见的英语单词“can”,同时仍然在我的分析器中使用“小写”过滤器(用于搜索不区分大小写)?

我使用的自定义分析器是:

"analyzer": {
"tight": {
"type": "custom",
"tokenizer": "standard",
"stopwords": "_english_",
"filter": ["lowercase", "asciifolding"]
}
}

在索引时,当大写字母“CAN”命中我的分析器时,它变成了英文单词“can”。然后,当我搜索“CAN”时,我得到了所有包含英文单词“can”的文档。我只想要包含大写单词“CAN”的文档。可能还有其他属于类似模式的首字母缩略词。

解决这个问题的最佳方法是什么?

最佳答案

实现它的一种方法是创建另一个不带 lowercase 标记过滤器的分析器,并在主字段的子字段上使用该分析器。它是这样的:

使用两个分析器 tighttight_acronym 创建索引。前者赋给字段,后者赋给field.acronyms子字段:

PUT index
{
"settings": {
"analysis": {
"analyzer": {
"tight": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding"
]
},
"tight_acronym": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"asciifolding"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"field": {
"type": "string",
"analyzer": "tight",
"fields": {
"acronyms": {
"type": "string",
"analyzer": "tight_acronym"
}
}
}
}
}
}
}

然后我们索引两个文档:

PUT index/test/1
{ "field": "It is worth CAN 300" }
PUT index/test/2
{ "field": "can you do it?" }

然后,如果您搜索 CAN(在子字段上),您将获得第一个文档

POST index/test/_search
{
"query": {
"match": {
"field.acronyms": "CAN"
}
}
}

如果您搜索 can(在主字段上),您将获得第二个文档

POST index/test/_search
{
"query": {
"match": {
"field": "can"
}
}
}

关于tokenize - Elasticsearch - 如何在使用小写过滤器时保留大写首字母缩略词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38778499/

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