我们正在实施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"
}
}
}
答案 0 :(得分:0)
您需要使用"关键字"定义自定义分析器。 tokenizer和模式替换标记过滤器以删除任何特殊字符并将其用于您的字段。分析仪可以定义如下
"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
上进行搜索