Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 如何在elasticsearch中按时间帧过滤结果_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Go - Fatal编程技术网 elasticsearch 如何在elasticsearch中按时间帧过滤结果,elasticsearch,go,elasticsearch,Go" /> elasticsearch 如何在elasticsearch中按时间帧过滤结果,elasticsearch,go,elasticsearch,Go" />

elasticsearch 如何在elasticsearch中按时间帧过滤结果

elasticsearch 如何在elasticsearch中按时间帧过滤结果,elasticsearch,go,elasticsearch,Go,我对围棋的编程还是个新手 我正在尝试创建一个简单的程序,它只做一件事,即通过ElasticSearchAPI搜索字符串。 我的问题针对我使用的“”软件包 下面是一个代码示例: package main import ( "fmt" "gopkg.in/olivere/elastic.v2" "log" "reflect" ) type Syslog struct { Program string Message string T

我对围棋的编程还是个新手

我正在尝试创建一个简单的程序,它只做一件事,即通过ElasticSearchAPI搜索字符串。 我的问题针对我使用的“”软件包

下面是一个代码示例:

package main

import (
    "fmt"
    "gopkg.in/olivere/elastic.v2"
    "log"
    "reflect"
)

type Syslog struct {
    Program   string
    Message   string
    Timestamp string
}


func main() {

    client, err := elastic.NewClient(elastic.SetURL("http://localhost:9200"))
    if err != nil {
        log.Fatal(err)
    }
    info, code, err := client.Ping().Do()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Elasticsearch returned with code %d and version  %s", code, info.Version.Number)

    termQuery := elastic.NewTermQuery("message", "configuration")

    searchResult, err := client.Search().
        //PostFilter(postFilter).
        Index("logstash-*").     // search in index "logstash-*"
        Query(&termQuery).       // specify the query
        Sort("timestamp", true). // sort by "message" field, ascending
        From(0).Size(10).        // take documents 0-9
        Pretty(true).            // pretty print request and response JSON
        Do()                     // execute
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf(" Query took %d milliseconds\n", searchResult.TookInMillis)

    var ttyp Syslog

    for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) {
        t := item.(Syslog)
        fmt.Printf("Found %s %s %s\n", t.Timestamp, t.Program, t.Message)
    }

}
这是可行的,但我真正想要的是按时间范围限制搜索

据我所知,我需要使用FilteredQuery函数。但我在试图找出如何创建过滤查询时迷失了方向

有一个创建它的函数“FilteredQuery”,它需要查询类型作为输入参数,但没有创建查询本身的函数。我只需要创建一个所需类型的变量,但它仍然需要像elasticsearch中要查找的字段和要查找的字符串这样的字段

调用
func(FilteredQuery)Filter
中的Filter变量也是如此

可能有人已经有了一个例子,或者可以为我指出正确的方向

我有一个JSON示例,如果将其传递给ElastCaseArch,将得到我想要的:

"query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "message:\"configuration\"",
          "analyze_wildcard": true
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "@timestamp": {
                  "gte": 1442100154219,
                  "lte": 1442704954219
                }
              }
            }
          ],
          "must_not": []
        }
      }
    }
  },
但我不知道如何在围棋中实现同样的功能。谢谢。

请参阅和

以下是生成所需结果的示例:

package main

import (
    "encoding/json"
    "fmt"

    elastic "gopkg.in/olivere/elastic.v2"
)

func main() {

    termQuery := elastic.NewTermQuery("message", "configuration")

    timeRangeFilter := elastic.NewRangeFilter("@timestamp").Gte(1442100154219).Lte(1442704954219)

    // Not sure this one is really useful, I just put it here to mimic what you said is the expected result
    boolFilter := elastic.NewBoolFilter().Must(timeRangeFilter)

    query := elastic.NewFilteredQuery(termQuery).Filter(boolFilter)

    queryBytes, err := json.MarshalIndent(query.Source(), "", "\t")
    if err != nil {
        panic(err)
    }

    fmt.Println(string(queryBytes))
}
它产生的输出是:

{
    "filtered": {
        "filter": {
            "bool": {
                "must": {
                    "range": {
                        "@timestamp": {
                            "from": 1442100154219,
                            "include_lower": true,
                            "include_upper": true,
                            "to": 1442704954219
                        }
                    }
                }
            }
        },
        "query": {
            "term": {
                "message": "configuration"
            }
        }
    }
}