- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的 ElasticSearch 索引使用标准分析器,我注意到当我使用 %
搜索查询时在其中 - 分析仪丢弃了 %
作为词干分析步骤的一部分(在查询“2% milk”上)
GET index_name/_analyze
{
"field": "text.english",
"text": "2% milk"
}
响应是以下 2 个标记(2
和 milk
):
{
"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/
我想搜索一个单词及其在句子中的变体。例如,单词“happy”的变体是“happiest”、“happier”。有java库支持吗? 最佳答案 您可以使用Porter stemming algorith
愚蠢的,但我无法访问 NLTK 中的主干函数。 我打电话 import nltk nltk.stem.porter.step1ab() 但我被告知该对象没有 step1ab 属性。我想我以某种方式没有
我想将 DataFrame 的列和索引限制为这样的内容 ps = PorterStemmer() df_dic = pd.read_csv('inquirerbasic_clean.csv', sep
查看以下脚本tortest.py,它反复切换TOR电路并检查IP地址是否已更改: #!/usr/bin/env python2.7 # -*- coding: utf-8 -*- import jso
我是一名优秀的程序员,十分优秀!