gpt4 book ai didi

ElasticSearch - 从标准词干分析器中排除特殊字符

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

我正在为我的 ElasticSearch 索引使用标准分析器,我注意到当我使用 % 搜索查询时在其中 - 分析仪丢弃了 %作为词干分析步骤的一部分(在查询“2% milk”上)

GET index_name/_analyze 
{
"field": "text.english",
"text": "2% milk"
}

响应是以下 2 个标记(2milk):

{
"tokens": [
{
"token": "2",
"start_offset": 0,
"end_offset": 1,
"type": "<NUM>",
"position": 0
},
{
"token": "milk",
"start_offset": 3,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 1
}
]
}

意思是,2%变成 2

我想使用标准词干分析器来减少标点符号,我不想使用空格词干分析器或其他非标准词干分析器,但我确实想使用 <number>%在索引中作为术语签名。

有没有办法配置词干分析器忽略数字旁边的特殊字符?最坏的情况是根本不忽略它?

谢谢!

最佳答案

您可以通过使用字符过滤器配置自定义分析器来实现所需的行为,该字符过滤器可防止“%”字符被剥离。

查看有关内置分析器配置的 Elasticsearch 文档,以将该配置用作配置自定义分析器的蓝图(参见 Elasticsearch 引用:english analyzer)

添加一个字符过滤器,将百分比字符映射到不同的字符串,如以下代码片段所示:

PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"my_percent_char_filter"
]
}
},
"char_filter": {
"my_percent_char_filter": {
"type": "mapping",
"mappings": [
"0% => 0_percent",
"1% => 1_percent",
"2% => 2_percent",
"3% => 3_percent",
"4% => 4_percent",
"5% => 5_percent",
"6% => 6_percent",
"7% => 7_percent",
"8% => 8_percent",
"9% => 9_percent"
]
}
}
}
}
}

POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "The fee is between 0.93% or 2%"
}

有了这个,您甚至可以搜索特定的百分比(例如 2%)!

替代解决方案

如果您只是想删除百分比字符,您可以使用完全相同的方法,但只需将 % 字符映射到一个空字符串,如以下代码片段所示

"char_filter": {
"my_percent_char_removal_filter": {
"type": "mapping",
"mappings": [
"% => "]
}
}

顺便说一句:这种方法不被认为是“hack”,它是在将原始字符串发送到分词器之前修改它的标准解决方案。

关于ElasticSearch - 从标准词干分析器中排除特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60060062/

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