首页 > 解决方案 > 如何按 java 枚举搜索

问题描述

我将数据存储在弹性搜索中。其中一个字段是日志记录级别。这些是在 Java 枚举中定义的。

枚举是:

0 => undefined
1 => info
2 => low
3 => high
4 => fatal

编辑:这是我正在尝试的,但不断收到变量 [级别] 未定义错误。

curl -H 'Content-Type: application/json' "http://localhost:33206/_search" -d'
{
    "sort" : {
        "_script" : {
            "type" : "number",
            "script" : {
                "lang": "painless",
                "source": "params.mapping[doc['level'].value]",
                "params" : {
                  "UNDEFINED": 0,
                  "INFO": 1,
                  "LOW": 2,
                  "HIGH": 3,
                  "FATAL": 4
                }
            },
            "order" : "asc"
        }
    }
}

'

在弹性搜索中,我们存储的是字符串而不是数字。

如果我想查询弹性搜索并按相应的数字排序,我该怎么做?当然按字符串排序会产生错误的结果。

标签: elasticsearch

解决方案


这是不可能的,也不推荐使用脚本,因为从性能角度来看它并不好。

您应该有一个单独的字段,您需要在其中存储integer值并对其进行排序。

没有脚本的原因:

如果可能,请避免在搜索中使用脚本或脚本字段。因为脚本不能利用索引结构,所以在搜索查询中使用脚本会导致搜索速度变慢。

如果您经常使用脚本来转换索引数据,则可以通过在摄取期间进行这些更改来加快搜索速度。但是,这通常意味着索引速度较慢。

还有一件事是security。存在漏洞,使其易受攻击。

参考


推荐阅读