我正在寻找一种方法来匹配“lau”,“la'u”和(理想情况下)“la u”对以下数据的查询:
“La'u”(请注意,这是一个经过修改的撇号)
我的分析仪是:
analyzer: {
folding: {
tokenizer: 'icu_tokenizer',
filter: [ 'lowercase', 'icu_folding_filter' ],
char_filter: [ 'extended_punctuation_char_filter' ]
}
},
char_filter: {
extended_punctuation_char_filter: {
type: 'mapping',
mappings: [ '\u02BC => \u0027' ]
}
},
...
这会发出以下标记,该标记显示已修改的撇号替换为普通的撇号:
{
"tokens": [
{
"token": "la'u",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
}
]
}
为了匹配“lau”和“la u”,我假设我需要发出其他令牌排列。我正在尝试找到令牌/字符过滤器,它允许我发出多个代表上述折叠标点符号的标记(“la'u”),剥离标点符号(“lau”),以及打破标点符号本身的标记(即两个代币:“la”,“u”)。
我正在使用ES 5.1,但如果在6x上有解决方案,则会考虑升级。
谢谢!
答案 0 :(得分:0)
使用同义词标记过滤器。你可以用“la'u”代替“lau”,“la u”。 在SOLR格式中,这将是
"synonym": {
"type": "synonym",
"format": "solr",
"synonyms": [
"lau, l au => la'u"
]
}
您可以将它们全部匹配而无需替换为
"synonym": {
"type": "synonym",
"format": "solr",
"synonyms": [
"lau, l au, la'u"
]
}
详情请见此处 https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html