【问题标题】:Wildcard query doesn't work as expected on Elastic Search server通配符查询在 Elastic Search 服务器上无法按预期工作
【发布时间】:2018-08-22 20:42:05
【问题描述】:

如果我搜索包含状态代码 200 的文档,我会得到预期的结果,但是当我搜索包含 20 的文档时,我什么也得不到!?我认为通配符查询就像 SQL 的“LIKE '%search%'”。这只是一个例子,我对其他(字符串)字段也有同样的问题。

有谁知道我为什么会遇到这个问题以及如何获得我想要的 - SQL 的“LIKE '%search%' 行为?

我搜索的索引是由 Logstash 自动创建的。

这是我发送的查询的一部分:

"wildcard": {
    "statusCode": {
        "wildcard": "20",
        "boost": 1.0
    }
}

这是映射的一部分:

"mappings": {
    "doc": {
        ...
        "properties": {
            ...
            "statusCode": {
                "type": "text",
                "norms": false,
                "fields": {
                    "keyword": {
                        "type": "keyword",
                        "ignore_above": 256
                    }
                }
            }
        }
    }
}

【问题讨论】:

  • wildcard 查询唯一可能的通配符是*?,您在哪里看到可以使用括号?
  • 我放了它们,因为我同时发送了 200 和 20。为了清楚起见,我现在将它们删除
  • 那么如果你坚持使用wildcard,你应该指定20*20?,否则你可以使用prefix查询并简单地指定20
  • 这有帮助,但我有类似的问题,我刚刚在上面描述过。 TY
  • 我觉得原问题解决了,更新应该属于新问题了。

标签: elasticsearch logstash


【解决方案1】:

如果您坚持使用wildcard 查询,则应指定20*20?...

"wildcard": {
    "statusCode": {
        "wildcard": "20*",
        "boost": 1.0
    }
}

"wildcard": {
    "statusCode": {
        "wildcard": "20?",
        "boost": 1.0
    }
}

...否则您可以使用prefix query 并简单地指定20

"prefix": {
    "statusCode": {
        "value": "20",
        "boost": 1.0
    }
}

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多