Elastic BoolQuery возвращает 0 хитов, даже если документы доступны - PullRequest
0 голосов
/ 05 февраля 2019

У меня следующее определение эластичного поискового индекса:

{
    "mappings":{
        "users":{
            "properties":{
                "version":{
                    "type":"text"
                },
                "event": {
                    "type": "nested",
                    "properties": {
                        "event_type": {"type":"text"},
                        "timestamp": {"type":"text"}
                    }
                },
                "user": {
                    "type": "nested",
                    "properties": {
                        "email": {"type":"text"},
                        "username": {"type":"text"},
                    }
                },
                "details": {"type":"text"}
            }
        }
    }
}

Нет проблем, когда я пытаюсь получить все документы, вот код:

    searchResult, err := l.client.Search().
        Index(INDEX_NAME). // search in index "twitter"
        Type("log").
        // From(0).Size(10). // take documents 0-9
        // Pretty(true). // pretty print request and response JSON
        Do(c) // execute
    if err != nil {
        log.Println("Error while getting results: ", err)
        return &HistoryResponse{}, err
    }
    var lg LogElasticStruct
    for _, item := range searchResult.Each(reflect.TypeOf(lg)) {
        log.Println(item)
        if t, ok := item.(LogElasticStruct); ok {
            log.Println("LogStruct by: ", t.User.Email, t.Event.EventType)
        }
    }

ЭтоВыводы корректируют данные, которые у меня есть внутри индекса.Проблема возникает, когда я пытаюсь получить только те документы, которые соответствуют свойству электронной почты.
Я пробовал следующее решение, используя BoolQuery

    query := elastic.NewBoolQuery()
    query = query.Must(elastic.NewTermQuery("user.email", evt.Email))
    searchResult, err := l.client.Search().
        Index(INDEX_NAME). // search in index "twitter"
        Type("log").
        Query(query). // specify the query
        // Pretty(true). // pretty print request and response JSON
        Do(c) // execute

Возвращает ноль документа, даже если естьдокумент, который совпадает с адресом электронной почты внутри структуры evt.Есть идеи?
Я также напечатал запрос, который создал пакет go:

  {
  "bool": {
    "must": {
      "term": {
        "user.email": "an@ema.il"
      }
    }
  }

Forogt говорит: я использую olivere/elastic пакет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...