【发布时间】:2018-10-23 15:28:11
【问题描述】:
我一直在使用模糊匹配构建 ElasticSearch 查询来匹配系统中的用户。当针对特定的用户组(我的名字的用户)运行它时,查询似乎运行良好,但是当针对随机选择的用户运行它时,它似乎失败了。
出于测试目的,我传递的是特定用户的确切值,因此我预计至少有 1 个匹配项。
在缩小范围时,我发现exact 与名称匹配会按预期返回数据,但将 same 值放入模糊块会导致它返回 0 个结果。
例如,此查询按预期返回用户记录:
{
"from": 0,
"size": 1,
"query": {
"bool": {
"must": [
{
"match": {
"firstName": {
"query": "sVxGBCkPYZ",
"boost": 30
}
}
}
],
"should": [
]
}
},
"fields": [
"id",
"firstName"
]
}
但是,用以下内容替换 match 元素无法返回任何记录:
{
"fuzzy": {
"firstName": {
"value": "sVxGBCkPYZ",
"fuzziness": 2,
"boost": 30,
"min_similarity": 0.3
}
}
}
为什么会发生这种情况,我能做些什么来纠正这种情况?
供参考。这是我目前使用的 ES 版本:
"version": {
"number": "1.7.1",
"build_hash": "b88f43fc40b0bcd7f173a1f9ee2e97816de80b19",
"build_timestamp": "2015-07-29T09:54:16Z",
"build_snapshot": false,
"lucene_version": "4.10.4"
}
【问题讨论】:
-
查询 firstName 和 personal.firstName 不应该相同。你能发布你的映射吗?获取
/_mapping ? -
@Lupanoide 道歉,我错过了该示例的一些代码清理。它们是同一个字段。
标签: elasticsearch fuzzy-search