【问题标题】:the question of Elasticsearch Painless scriptElasticsearch Painless script 的问题
【发布时间】:2021-04-22 04:38:44
【问题描述】:

以下代码:

                  def product =doc['value.keyword'].value;
                  if (Objects.isNull(product)) return false;
                  if (params.mustNumber == 1 && /[0-9]+\.[0-9]+/.matcher(product).matches()){
                    return Double.parseDouble(product)>3
                  } else {
                    return false
                  }
                

我可以找到所有大于 3 的浮点类型字符串,但不是整数

结果可搜索:

"buckets": [
        {
          "key": "10.00",
          "doc_count": 138
        },
        {
          "key": "8.00",
          "doc_count": 126
        },
        {
          "key": "12.00",
          "doc_count": 62
        },
        {
          "key": "5.00",
          "doc_count": 49
        },
        {
          "key": "14.30",
          "doc_count": 42
        },
        {
          "key": "9.50",
          "doc_count": 38
        },
        {
          "key": "12.50",
          "doc_count": 36
        }

不能搜索但应该搜索结果:

"value":"6",
"value":"8",
"value":"10",
"value":"20"

请帮帮我!!

【问题讨论】:

  • 这可能是因为您的正则表达式会查找带小数的数字。为什么要使用正则表达式来检查数字?

标签: elasticsearch elasticsearch-painless


【解决方案1】:

这是因为您的正则表达式会查找带小数的数字。但是不需要使用正则表达式来检查数字,try/catch 块就可以了。试试这个:

              def product = doc['value.keyword'].value;
              if (Objects.isNull(product)) return false;
              if (params.mustNumber == 1){
                try {
                  return Double.parseDouble(product)>3
                } catch (Exception e) {
                  return false;
                }
              } else {
                return false
              }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2021-12-04
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多