有人知道如何从建议结果集中过滤拼写错误吗?
此查询找到好的建议,但也包括部分拼写错误。例如,“商业抵押”返回“商业抵押”,这很好,但“商业抵押”也返回“商业抵押”,因为商业条款仍然是错误的。
{
"suggest" : {
"text" : "comercial morgage",
"simple_phrase" : {
"phrase" : {
"analyzer" : "standard",
"field" : "title.raw",
"max_errors" : 0.8,
"size" : 3,
"highlight": {
"pre_tag": "<em>",
"post_tag": "</em>"
},
"collate": {
"query": {
"match": {
"title.raw" : "{{suggestion}}"
}
},
"prune": true
}
}
}
}
}
这返回
{
"took": 42,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": { ... },
"suggest": {
"simple_phrase": [
{
"text": "comercial morgage",
"offset": 0,
"length": 17,
"options": [
{
"text": "commercial mortgage",
"highlighted": "<em>commercial mortgage</em>",
"score": 0.0025874644,
"collate_match": true
},
{
"text": "commercial mortgages",
"highlighted": "<em>commercial mortgages</em>",
"score": 0.0022214006,
"collate_match": true
},
{
"text": "comercial mortgage",
"highlighted": "comercial <em>mortgage</em>",
"score": 0.0019709675,
"collate_match": true
}
]
}
]
}
}
“comercial [em]mortgage[/em]”的 collate_match 是 true,即使这个确切的短语没有出现在任何文档标题中。
分数非常低且非常相似,因此我无法按分数进行过滤。
目前它在最后一页上看起来还不错,因为我使用了一些 javascript 来仅显示被 [em/] 标签包围的结果,但这是一个 hack,不是很好。
elasticsearch 的版本是 1.5.3,但我们可能会很快升级,所以我不能在建议中使用过滤器。
有谁知道如何过滤/修剪 title.raw 字段中不存在的任何建议?
谢谢。