弹性搜索得分基长字符

时间:2015-11-27 10:26:39

标签: elasticsearch

我有查询1:

  "multi_match": {
    "query": "abcdef",
    "type": "best_fields",
    "fields": [
      "email"
    ]
  }

结果是对的:

  "total": 1,
  "max_score": 4.6334114,
  "hits": [
     {
        "_score": 4.6334114,
        "_source": {
           "id": 244,
           "email": "abcdef@xxxxx.com",
        }
     }
  ]
 }

但问题2:

  "multi_match": {
    "query": "abc",
    "type": "best_fields",
    "fields": [
      "email"
    ]
  }

结果是:

  "total": 0,
  "max_score": null,
  "hits": []

如何自定义分数到查询2获得结果相同的查询1?

由于

1 个答案:

答案 0 :(得分:0)

您应该了解如何将条款编入索引,例如您的电子邮件(如果您使用的是默认设置)会发出这些代币:

  • abcdef
  • xxxxx
  • com

这就是为什么当您使用"abcdef"作为短语查询时,您将获得匹配。

现在您可以使用分析器,它将使用Edge NGram filter(或tokenizer)。所以你的电子邮件会发出这样的代币:

  • abc
  • abcd
  • abcde
  • abcdef
  • abcefg ...
  • com

您必须使用此custom analyzer为您的电子邮件编制索引,然后您的abc短语才会找到匹配