我正在使用 Elasticsearch 构建一个聊天机器人,但我无法让它按照我的期望运行。
我在索引 ‘/questions/q’ 中有这种格式的问题对象:
{ "name": "some question" //仅用于标识, "questions": [ "Is ice cream good?", "Is ice cream delicious?", "Will i love the taste of ice cream?" ], "response": "yes"}
我想将输入的问题与 questions 数组进行匹配,其中得分最高的对象是其数组中最佳匹配问题的那一个。也就是说,我希望对象的得分是其数组中最高问题的得分。
目前,我使用了类似于以下的查询:
{ "query": { "match": { "questions": { "query": "where can i buy tickets" } } }}
但是如果数组很大,它会给我非常低的得分,我想是因为它将数组展平为一个大字符串。
对于这种用例,我应该使用什么类型的查询?
回答:
你应该使用嵌套数据类型,这不仅能解决你的问题,还能防止像“is love good?”这样的字符串匹配到这组问题。
了解原因和方法,请查看 https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html