【问题标题】:Elastic: Is it possible to disable fuzziness of certain fields?Elastic:是否可以禁用某些字段的模糊性?
【发布时间】:2016-05-12 21:41:55
【问题描述】:

这是我的查询:

"multi_match":{  
   "query":"test",
   "fields":[  
      "name^2",
      "sortName^2",
      "externalId",
      "type^0.5"
   ],
   "type":"best_fields",
   "tie_breaker":0.3,
   "minimum_should_match":"30%",
   "fuzziness":"AUTO"
}

我的目标是在除“externalId”之外的所有字段上进行模糊处理。原因是用户在搜索特定 ID 时找到很多结果是没有意义的。

我会假设如果一个字段设置为 'not_analyzed' 它不会应用模糊性,但似乎情况并非如此。

有没有办法在映射中指定一个字段不是模糊的候选者?

【问题讨论】:

  • 映射中无法说明这一点。查询时应用模糊

标签: elasticsearch fuzzy-search


【解决方案1】:

由于您需要为每个字段设置模糊度,到目前为止我看到了两种方法:

  • 将 2 个查询与 dis_maxbool 查询结合起来

  • 使用有点笨拙的query_string 并将fuzziness 设置为0 用于externalId 字段。查询可能如下所示:

    {
      "query": {
        "query_string": {
          "query": "name:test^2 sortName:test^2 externalId:test~0 type:test^0.5"
        }
      }
    }
    

【讨论】:

  • 它似乎不起作用。它没有给我完全匹配的结果。也许我遗漏了一些东西,你能给这个运营商发一份参考资料吗? Google 在搜索“~”或“波浪号”时没有多大帮助
  • 是的,我的错,它不起作用,我错过了。这是我想到的参考:lucene.apache.org/core/3_0_3/queryparsersyntax.html#Fuzzy Searches
  • 谢谢大满贯。我相信“dis_max”在这里会起作用,因为它应该与我现在使用的“best_fields”具有相同的效果。我的用例比较复杂(我在这里发布了一个简化版本),我现在无法实现和测试,我会在测试后再次更新。
  • @David 这对你有用吗?我的需求与您在问题中描述的完全一样。
  • @Nick,很遗憾,我没有机会测试它。
猜你喜欢
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多