我们正在实现Elasticsearch
并在.NET解决方案中使用.Nest
的过程。我们创建并加载了一个包含多个字段的索引。我们希望定义和分析器将在用户输入UNV-1234
或UNV1234
时为itemNumber字段生成相同的搜索结果。 itemNumber字段仅限于项目编号,没有其他单词。但是,项目编号字段的编号可以用空格分隔。
根据我的搜索,关键字分析器似乎可以提供所需的结果。这对我们不起作用。
有人可以提供有关如何最好地做到这一点的信息吗?
"itemNumber": {
"type": "string",
"index": "not_analyzed",
"fields": {
"_english": {
"type": "string",
"analyzer": "english"
},
"_keyword": {
"type": "string",
"analyzer": "keyword"
},
"_standard": {
"type": "string",
"analyzer": "standard"
}
}
}
最佳答案
您需要使用“关键字” token 生成器和模式替换 token 过滤器定义自定义分析器,以删除任何特殊字符并将其用于您的字段。分析仪可以定义如下
"analysis" : {
"filter" : {
"cleanspecial": {
"type": "pattern_replace",
"pattern": "[^a-zA-Z0-9]",
"replacement": ""
}
},
"analyzer" : {
"cleanspecialanalyzer": {
"filter": ["cleanspecial"],
"type": "custom",
"tokenizer": "keyword"
}
}
}
注意:请验证模式,我尚未测试。
您可以如下更改映射
"itemNumber": {
"type": "string",
"index": "not_analyzed",
"fields": {
"_english": {
"type": "string",
"analyzer": "english"
},
"_keyword": {
"type": "string",
"analyzer": "cleanspecialanalyzer"
},
"_standard": {
"type": "string",
"analyzer": "standard"
}
}
}
搜索可以在字段itemNumber._keyword上进行