У меня следующее определение эластичного поискового индекса:
{
"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
пакет