我想用我的语言映射常见错误,如:
xampu - >洗发水
洗发水是一个英语单词,但在巴西常用。用葡萄牙语," ch"听起来像" x",有时候" s"听起来像" z"。我们也没有" y"关于我们的语言,但它在名字和外来词上很常见 - 听起来像是"我"。
所以我想映射一个字符替换,但也保留原始单词在同一位置。
因此映射表将是:
ch -> x
sh -> x
y -> i
ph -> f
s -> z
我已经看过"字符过滤器",但它似乎只支持替换: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-mapping-charfilter.html
我想根据原文创建衍生词,这样即使输入错误,用户也可以找到正确的词。要存档,请使用以下产品名称:
SHAMPOO NIVEA MEN
应该被标记为:
0: SHAMPOO, XAMPOO
1: NIVEA
2: MEN
我正在使用同义词过滤器,但我需要使用同义词来表达每个单词。
有什么办法吗?
感谢。
答案 0 :(得分:1)
对于您的用例,Multi-Field似乎最适合您。您可以通过两种方式对字段进行分析,一种使用standard
,另一种使用custom analyzer
创建的mapping Char Filter
。
看起来像是:
创建索引
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"my_char_filter"
]
}
},
"char_filter": {
"my_char_filter": {
"type": "mapping",
"mappings": [
"ch => x",
"sh => x",
"y => i",
"ph => f",
"s => z"
]
}
}
}
}
}
创建多字段
POST my_index/_mapping/my_type
{
"properties": {
"field_name": {
"type": "text",
"analyzer": "standard",
"fields": {
"mapped": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}
上面的映射会创建两个版本的field_name
,一个用is standard
分析器进行分析,另一个用你创建的custom analyzer
进行分析。
为了查询两者,您可以在两个版本上使用should
。
GET my_index/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"field_name": "xampoo"
}
},
{
"match": {
"field_name.mapped": "shampoo"
}
}
]
}
}
}
希望这可以帮助你!!