任何人都知道如何从建议结果集中过滤拼写错误?
此查询可找到好的建议,但也包含部分拼写错误。例如“商业抵押贷款”返回“商业抵押贷款”,这是好的,但也是“商业抵押贷款”,这是不好的,因为商业术语仍然是错误的。
{
"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]抵押[/ em]”的collate_match为真,即使这个确切的短语没有出现在任何文档标题中。
得分非常低且非常相似,所以我不能按分数过滤。
目前它在最终页面上看起来不错,因为我使用一些小的javascript只显示被[em /]标签包围的结果,但这是一个黑客而且不是很好。
elasticsearch的版本是1.5.3,但我们很快就会升级,所以我不能在建议中使用过滤器。
有谁知道如何过滤/修剪title.raw字段中不存在的任何建议?
感谢。
答案 0 :(得分:0)
在整理查询中,您可以使用您想要的任何查询。
尝试为您的查询添加默认运算符,因此您希望所有字词在字段中匹配。
像
{
"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" : {
"query": "{{suggestion}}",
"operator" : "and"
}
}
},
"prune": true
}
}
}
}
}