当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch TermsFacet给出错误计数

戚明朗
2023-03-14

我把数据放如下:

curl -X DELETE "http://localhost:9200/articles'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "One",   "tags" : "foo","datetime":"2005-12-23 23:10:52"}'


curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "Two",   "tags" : "bar","datetime":"2005-12-23 23:10:53"}'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "Three", "tags" : "baz","datetime":"2005-12-23 23:10:54"}'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "four", "tags" : "baz","datetime":"2005-12-23 23:10:55"}'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "five", "tags" : "foo","datetime":"2005-12-23 23:10:56"}'

因此,每当我查询terms facet时,它都会给出正确的结果,下面是我的Elasticsearch查询:

curl  'http://localhost:9200/articles/article/_search?pretty=true' -d '{

   "query": {
       "match_all": {}
   },
    "facets" : { "myfacet" : { "terms" : {"field" : "tags"}}
    }
}'

但是,当我将filter添加到Facet时,它不会显示任何Facet计数,以下是查询:

curl  'http://localhost:9200/articles/article/_search?pretty=true' -d '{

   "query": {
       "match_all": {}
   },
   "facets" : {
        "myfacet" : { "terms" : {"field" : "tags"},
             "filter" : { "range" :{
 "datetime" : {"from" : "2005-12-23   3:10:52","to" : "2005-12-23 23:10:56" }

        }
            }
    }
    }
}'

我得到的结果如下

facets" : {
    "myfacet" : {
      "_type" : "filter",
      "count" : 0
    }
  }

所以,任何人都知道为什么它会给出这样的计数。

共有1个答案

卫飞
2023-03-14

日期的格式无效,请查看elasticsearch支持的受支持的日期时间格式(太长,不要读取,jodatime支持的任何日期都受elasticsearch支持)。

http://www.elasticsearch.org/guide/reference/mapping/date-format.html

话虽如此,您只需修改insert语句中的日期,并将其设置为有效的日期格式,如2005-12-23t23:10:55z。然后,只需将查询更改为该时间格式的适当时间范围,就可以得到结果了。

在编写这些查询时也要小心,因为我注意到您在from子句中使用的日期无效。

以下是修改后的curl脚本:

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "One",   "tags" : "foo","datetime":"2005-12-23T23:10:52Z"}'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "Two",   "tags" : "bar","datetime":"2005-12-23T23:10:53Z"}'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "Three", "tags" : "baz","datetime":"2005-12-23T23:10:54Z"}'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "four", "tags" : "baz","datetime":"2005-12-23T23:10:55Z"}'

curl -X POST "http://localhost:9200/articles/article" -d '{"title" : "five", "tags" : "foo","datetime":"2005-12-23T23:10:56Z"}'

和修改后的搜索:

 curl  'http://localhost:9200/articles/article/_search?pretty=true' -d '{

   "query": {
      "match_all": {}
    },
    "facets" : {
     "myfacet" : { 
         "terms" : {"field" : "tags"},
         "filter" : { "range" :{
                         "datetime" : {
                             "from" : "2005-12-23T23:10:52Z",
                              "to" : "2005-12-23T23:10:54Z" 
                          }   
                       }
                    }
                  }
             }
}'
 类似资料:
  • 问题内容: 我想从字符串中删除最后一次出现的“ \”这个特殊字符。我尝试了像这样的字符串函数 但是每次遇到错误时,我都要求加一个额外的报价。同时我发现(“ \”“)用来传递”这个特殊字符。我该如何进行? 问题答案: 您需要使用 字符串中的字符转义特殊字符(依此类推)。因此,在它们之前使用a 会使它成为 文字 ,这意味着java会将其后的内容视为常规字符。 你可以测试看看 将打印。它会打印。 所以:

  • 问题内容: 我在我的应用程序的servlet中使用以下代码 当我运行应用程序并调用servlet时,出现以下错误 我已经在Java版本为JDK 1.6.20的Linux机器上托管了该应用程序。 是什么原因引起的问题… 是编写代码的类,是在上述类中调用方法的servlet … 问题答案: 要在服务器端应用程序中使用AWT类,我相信您需要在“无头”模式下运行。将servlet容器的启动更改为包括: (

  • 来自servlet com.google.gson的未捕获异常。JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_OBJECT,但在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(Reflective TypeAdapter Fact

  • 问题内容: 我正在使用Python编写一些加密算法,但是我以前从未使用过Python。 首先,看一下这段代码,然后我将解释这个问题, x和y的值为, 我不明白代码的第三行。为了理解第三行,我不得不研究函数,我遇到了这个问题, zip函数帮助元组 根据这个问题的答案,代码, 将输出, 但是当我尝试打印时, 我得到这个输出, 为什么我的输出与原始输出不同? 问题答案: 在Python 3中返回一个迭代

  • 问题内容: 根据Wolfram Mathematica: cos(50) = 0.6427876096865394 ; 但是这段Java代码: 给出 0.9649660284921133 。 有什么问题吗? 问题答案: 期望参数以弧度为单位。这将返回您需要的结果:

  • 我在家庭作业中使用Eclipse,我真的很挣扎。目标是编写一个工资单程序,让用户输入他们的姓名、工作时间、工资率、联邦和州预扣税,然后输出他们预扣金额的计算信息以及他们的净工资。 我使用了我熟悉的println语句来显示输出,但老师希望我们使用函数,我根本无法让它工作。如果我使用println语句,所有的值都会填充,但由于某种原因,我无法让printf执行相同的操作。我错过了什么?如果我使用pri