【问题标题】:Comparing two numeric fields elasticsearch比较两个数字字段elasticsearch
【发布时间】:2018-12-03 16:54:45
【问题描述】:

我正在比较 2 个数字字段,但它看起来不起作用。 结果包含未根据条件过滤的文档。 我错过了什么吗?

GET crawl-panda-18-06-2018-2-2018/_search

{
  "filtered": {
    "filter": {
      "script": {
        "script": "doc[csv_hit].value > doc[csv_googlebot-desktop].value"
      }
    }
  }
}

映射:

    {
  "crawl-panda-18-06-2018-2-2018": {
    "aliases": {},
    "mappings": {
      "items": {
        "properties": {
   (...)
          "csv_googlebot-desktop": {
            "type": "long"
          },
          "csv_hit": {
            "type": "long"
          }
    (...)

结果样本:

"csv_googlebot-desktop": 1,
"csv_hit": 0

【问题讨论】:

  • 您能否展示一个不应包含在结果集中的示例文档?另请出示您的地图。
  • 刚刚做到了。两个字段的映射是“数字”、“可搜索”和“可聚合”
  • 添加了有问题的映射
  • 这不是映射,这是来自 Kibana 的索引模式。运行GET crawl-panda-18-06-2018-2-2018会得到什么?
  • 只需将filtered 替换为bool。见stackoverflow.com/questions/40519806/…

标签: elasticsearch


【解决方案1】:

@Val 发现的第一个错误:Elasticsearch/Kibana 不允许在 GET 和查询之间使用线。

第二个错误是脚本过滤器已被脚本查询替换:

“脚本过滤器已被脚本查询替换。它在“查询上下文”中充当查询,在“过滤器上下文”中充当过滤器(请参阅查询 DSL)。”

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-script-filter.html#query-dsl-script-filter

使用以下代码:

GET index-name/_search
{
    "query": {
        "bool" : {
            "must" : {
                "script" : {
                    "script" : {
                        "source": "doc['field_a'].value > doc['field_b'].value",
                        "lang": "painless"
                     }
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2011-10-30
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多