弹性搜索7和Golang找不到数据

这是我的代码: 转到1.13并进行弹性搜索7

package main


import (
    "context"
    "encoding/json"
    "fmt"
    "github.com/teris-io/shortid"
    "github.com/olivere/elastic/v7"
    "log"
    "reflect"
    "time"
)


const (
    elasticIndexName = "documents"
)
var (
    elasticClient *elastic.Client
)
type DocumentRequest struct {
    Title   string `json:"title"`
    Content string `json:"content"`
}

type Document struct {
    ID        string    `json:"id"`
    Title     string    `json:"title"`
    CreatedAt time.Time `json:"created_at"`
    Content   string    `json:"content"`
}
func main() {
    var err error
    ctx := context.Background()
    elasticClient,err = elastic.NewClient(
        elastic.SetURL("http://127.0.0.1:9200"),elastic.Setsniff(false),)
    if err != nil {
        panic(err)
    }
    //_,err = elasticClient.CreateIndex(elasticIndexName).Do(ctx)
    if err != nil {
        fmt.Println(err)
    }
    //_,err2 := elasticClient.DeleteIndex(elasticIndexName).Do(ctx)
    if err != nil {
        fmt.Println(err)
    }
    indexParams := `{
        "settings":{
            "number_of_shards":1,"number_of_replicas":0


        },"mappings":{
                "properties": {
                    "content": {
"type":"text","fielddata": true
                    },"title": {
"type":"text","fielddata": true
                    }
                }
            }
        }
    }`

    // Create an index
    _,err = elasticClient.CreateIndex(elasticIndexName).BodyString(indexParams).Do(ctx)
    fmt.Println(indexParams)
    if err != nil {
        // Handle error
        // Get *elastic.Error which contains additional information
        e,ok := err.(*elastic.Error)
        if !ok {
        }
        log.Printf("Elastic failed with status %d and error %s.",e.Status,e.Details)
        panic(err)
    }
    if err != nil {
        fmt.Println(err)
    }
    var docs []DocumentRequest
    var doc1 DocumentRequest
    doc1.Content = "Content Bonjour"
    doc1.Title = "Title Bonjour"
    docs = append(docs,doc1)
fmt.Println(docs)

    for _,d := range docs {
        doc := Document{
            ID:        shortid.MustGenerate(),Title:     d.Title,CreatedAt: time.Now().UTC(),Content:   d.Content,}
        docJ,_ := json.Marshal(doc)
        fmt.Println(string(docJ))
        put2,err4 := elasticClient.Index().
            Index(elasticIndexName ).
            Id(doc.ID).
            BodyString(string(docJ)).
            Do(ctx)
        if err4 != nil {
            panic(err4)
        }
        fmt.Println(put2)


    }
    termQuery := elastic.NewTermQuery("title","Bonjour")
    result,err := elasticClient.Search().
        Index(elasticIndexName).            // search in index "documents"
        Query(termQuery).           // specify the query
        Sort("title",true). // sort by "user" field,ascending
        From(0).Size(10).           // take documents 0-9
        Pretty(true).               // pretty print request and response JSON
        Do(ctx)


    if err != nil {
        panic(err)
    }
    fmt.Println("result")
    fmt.Println(result)
    fmt.Printf("Found a total of %d docs\n",result.TotalHits())
    var ttyp DocumentRequest
    for _,item := range result.Each(reflect.TypeOf(ttyp)) {
        if t,ok := item.(DocumentRequest); ok {
            fmt.Printf("Doc %s: %s\n",t.Title,t.Content)
        }
    }
}

最后我有:

[{Title Bonjour Content Bonjour}]
{"id":"5DJ0u81WR","title":"Title Bonjour","created_at":"2019-11-14T23:16:26.028333176Z","content":"Content Bonjour"}
&{documents _doc 5DJ0u81WR 1 created 0xc0001581c0 2 1 0 false}
result
&{map[Content-Type:[application/json; charset=UTF-8]] 4 false 0 []  0xc00015b3e0 map[] map[] false <nil> <nil> 0xc000158600 0}
Found a total of 0 docs

我不明白为什么。该文档似乎已创建,但无法通过搜索找到。...

wangzhenhua7 回答:弹性搜索7和Golang找不到数据

您正在使用术语查询来匹配完全相同的字段

Title Bonjour!=Bonjour

此行

termQuery := elastic.NewTermQuery("title","Bonjour")

等效于

where title='Bonjour'

在mysql中,如果您要匹配但不完全匹配,则可以使用匹配查询

matchQuery := elastic.NewMatchQuery("title","Bonjour")
本文链接:https://www.f2er.com/3098749.html

大家都在问