对于EN语言,我有一个使用porter_stem的自定义分析器。我希望查询与“病毒”和“病毒”两个词返回相同的结果。
我所发现的是波特干病毒>病毒和病毒>病毒。因此,我得到了不同的结果。
我该怎么处理呢?
发布于 2021-01-14 13:08:15
您可以实现您的用例,即使用"virus“和”virus“两个单词的查询应该返回相同的结果--通过使用雪球令牌滤波器,将所有单词都引伸到它们的词根。
使用索引数据、映射、搜索查询和搜索结果添加工作示例
索引映射:
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_snow"
]
}
},
"filter": {
"my_snow": {
"type": "snowball",
"language": "English"
}
}
}
},
"mappings": {
"properties": {
"desc": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
分析API
GET /_analyze
{
"analyzer" : "my_analyzer",
"text" : "viruses"
}
生成以下令牌-
{
"tokens": [
{
"token": "virus",
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
}
]
}
索引数据:
{
"desc":"viruses"
}
{
"desc":"virus"
}
搜索查询:
{
"query": {
"match": {
"desc": {
"query": "viruses"
}
}
}
}
搜索结果:
"hits": [
{
"_index": "65707743",
"_type": "_doc",
"_id": "1",
"_score": 0.18232156,
"_source": {
"desc": "viruses"
}
},
{
"_index": "65707743",
"_type": "_doc",
"_id": "2",
"_score": 0.18232156,
"_source": {
"desc": "virus"
}
}
]
https://stackoverflow.com/questions/65707743
复制相似问题