Elasticsearch修剪了建议

时间:2015-06-30 08:56:05

标签: elasticsearch search-suggestion match-phrase

任何人都知道如何从建议结果集中过滤拼写错误?

此查询可找到好的建议,但也包含部分拼写错误。例如“商业抵押贷款”返回“商业抵押贷款”,这是好的,但也是“商业抵押贷款”,这是不好的,因为商业术语仍然是错误的。

{
  "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]”的collat​​e_match为真,即使这个确切的短语没有出现在任何文档标题中。

得分非常低且非常相似,所以我不能按分数过滤。

目前它在最终页面上看起来不错,因为我使用一些小的javascript只显示被[em /]标签包围的结果,但这是一个黑客而且不是很好。

elasticsearch的版本是1.5.3,但我们很快就会升级,所以我不能在建议中使用过滤器。

有谁知道如何过滤/修剪title.raw字段中不存在的任何建议?

感谢。

1 个答案:

答案 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 } } } } }