猿问

golang 中的 Elasticsearch 使用 olivere/elastic

我正在尝试在我的 go 应用程序中实现 elasticsearch。我正在使用https://github.com/olivere/elastic库进行 go,elasticsearch 在 docker 容器中运行。

我成功连接到elasticsearch并创建索引,之后我尝试将数据保存到elasticsearch,也成功了。当我运行查询时我开始遇到问题

我的映射看起来像这样

   "mappings":{

        "item":{

            "properties":{

                "id":{

                    "type":"integer"

                },

                "title":{

                    "type":"text"

                },

                "description":{

                    "type":"text"

                },

                "userid":{

                    "type":"integer"

                }

            }

        }

    }


我试图按这样的标题查询 es ,但得到空响应。如果我从 Search() 中删除查询,则会列出所有已保存的项目。我还尝试与 newBoolQuery 和 newMatchPhrase 结合使用,它也返回空响应。


query := elastic.NewTermQuery("title", "Hello there")

searchResult, err := elasticClient.Search().

    Index("items").

    Query(query).

    Pretty(true).

    Do(ctx)

if err != nil {

    return nil, err

}

return searchResult, nil

回复 :


 {

    "id": 81,

    "message": "Search successfull",

    "data": {

        "took": 1,

        "_scroll_id": "",

        "hits": {

            "total": 0,

            "max_score": null,

            "hits": []

        },

        "suggest": null,

        "aggregations": null,

        "timed_out": false,

        "_shards": {

            "total": 1,

            "successful": 1,

            "failed": 0

        }

    }

}


千巷猫影
浏览 252回答 1
1回答

交互式爱情

我认为你应该根据你的情况进行选择,如术语查询NewMatchQuery文档中所述避免对文本字段使用术语“查询”。默认情况下,Elasticsearch 会更改文本字段的值作为分析的一部分。这可能会使查找文本字段值的精确匹配变得困难。要搜索文本字段值,请改用匹配查询。您没有分享您索引的示例文档以及您想要查找的内容,但类似下面的内容应该对您的情况有所帮助query := NewMatchQuery("title", "Hello there")希望有帮助。
随时随地看视频慕课网APP

相关分类

Go
我要回答