我定义了以下自定义分析器:
{
"analysis": {
"analyzer": {
"products-alike": {
"filter": [
"lowercase",
"product-db"
],
"tokenizer": "standard"
}
},
"filter": {
"product-db": {
"type": "synonym",
"synonyms": [
"Xiaomi,Mi,Mi3,Mi4,Redmi",
"OnePlus,OnePlusOne,OnePlus1,OnePlus2"
]
}
}
}
}现在,我已经将其映射到所需的字段,并完成了查询。但是只有精确匹配才有结果,比如如果我查询Xiaomi,就会有结果,但是Mi或Mi3不会给我任何结果。为什么会发生这种情况,有谁能帮上忙呢?
发布于 2015-10-30 04:30:12
您只需用小写书写所有同义词,而不是CamelCase,如下所示:
{
"analysis": {
"analyzer": {
"products-alike": {
"filter": [
"lowercase",
"product-db"
],
"tokenizer": "standard"
}
},
"filter": {
"product-db": {
"type": "synonym",
"synonyms": [
"xiaomi,mi,mi3,mi4,redmi",
"oneplus,oneplusone,oneplus1,oneplus2"
]
}
}
}
}在此之后,它将工作,也就是说,如果您查询Mi3,您将匹配所有同义词标记:
curl -XGET 'localhost:9200/your_index/_analyze?analyzer=products-alike&pretty' -d 'Mi3'结果:
{
"tokens" : [ {
"token" : "xiaomi",
"start_offset" : 0,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "mi",
"start_offset" : 0,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "mi3",
"start_offset" : 0,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "mi4",
"start_offset" : 0,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 1
}, {
"token" : "redmi",
"start_offset" : 0,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 1
} ]
}https://stackoverflow.com/questions/33428428
复制相似问题