这是ES文档中字段的示例。如何查询只能为整数的“prices.value”?

在这种情况下,值是“150.99”,并且可以完全转换为整数。但有时在文本中可能会出现类似“值”:“很多”的文字,而我想排除具有此值的文档。

 "prices": [
     {
      "currency": "RUR",
      "id_offer": 605994811,
       "id_prcdoc": 42172,
        "id_prcknd": 20859,
         "info": {},
         "min_order": null,
         "sell_by": null,
         "value": "150.99"}]

该字段的索引:
"prices": {
        "type": "nested",
        "properties": {
          "currency": {
            "type": "keyword"
          },
          "id_offer": {
            "type": "integer"
          },
          "id_prcdoc": {
            "type": "integer"
          },
          "id_prcknd": {
            "type": "integer"
          },
          "min_order": {
            "type": "keyword"
          },
          "sell_by": {
            "type": "keyword"
          },
          "value": {
            "type": "keyword",
            "index": false
          }
        }
      }

有时它的“值”字段可以是“0.00”,可能我想将此值排除在外。

最佳答案

您可以使用脚本轻松检查值是否可以转换为数字。

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "prices",
            "query": {
              "script": {
                "script": "if(doc['prices.value'].size()==0){return false;}if(doc['prices.value'].value=='0.00'){return false;}try{ Double.parseDouble(doc['prices.value'].value); return true;} catch(Exception e){return false;} "
              }
            },
            "inner_hits": {}
          }
        }
      ]
    }
  }
}

结果将在inner_hit中。由于脚本速度较慢,因此在编制索引时最好解决它。我们可以创建另一个字段,该字段只有在价格值为数字时才具有值,并且在查询中可以使用该字段

编辑:
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "prices",
            "query": {
              "bool": {
                "must": [
                  {
                    "regexp": {
                      "prices.value": "[1-9][0-9]*.*[0-9]*"
                    }
                  }
                ]
              }
            },
            "inner_hits": {}
          }
        }
      ]
    }
  }
}

关于elasticsearch - 如何在ElasticSearch中查询可以为整数值的关键字嵌套字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60447219/

10-11 09:17