模糊匹配查询未考虑空格

时间:2018-07-10 11:59:05

标签: elasticsearch

我有一个名为“郊区”的字段,需要符合以下条件;

  • 可以进行1个换位
  • 可以进行1次更改
  • 第一个字符必须正确

鉴于我在某些郊区有空格,所以我需要或多或少将它们视为单词而不是短语。因此,如果我要搜索

  

'Sheoaks'

然后

  

“ She Oaks”应该是火柴

此刻,当我在郊区执行Match查询时,使用:

  • 模糊度= 1
  • operator = AND
  • fuzzy_transpositions = true
  • max_expansions = 50
  • prefix_length = 1

只有在查询中输入

时,我才会获得匹配项
  

的?? O ??'

  • “ S”必须正确(期望)的地方
  • ''必须存在(不需要)
  • “ O”必须正确(不需要)
  • 还有'?'允许不正确(期望)

我想要

  

'S ?????'

只要满足上述限制

1 个答案:

答案 0 :(得分:2)

这是预期的行为:

带有standard analyzer的“她橡树”将生成两个令牌:["she", "oaks"]并仅覆盖一个["sheoaks"]

因此,您的匹配查询尝试匹配["she", "oaks"]["sheoaks"]。但是,从“她”到“ sheoaks”以及从“ oaks”到“ sheoaks”有超过1个换位。所以它不匹配。

您需要在keyword analyzer使用index time and search time

to将在索引时生成["sheoaks"],在搜索时生成["she oaks"](根据您的示例)。然后只有1个换位,它应该起作用。