我有一个字段,我正在索引到Elasticsearch,这是一个字符串数组。因此,例如,这是字符串数组在两个记录中的样子:
Record 1: {"str1", str2", str3", "str4", "str5"}
Record 2: {"str1", str2", str6", "str7", "str8"}
问题1 :我希望能够在此数组中查询多个字符串。对于例如我的查询有“str1”,“str2”。 “str3”作为搜索参数。我想搜索字符串数组中包含这三个字符串中的任何一个的记录
问题2:对于上面的场景,Record 1将以高于记录2的分数返回(因为所有三个字符串都在记录1的数组中,但记录2中只有两个字符串)。
这有可能吗?你可以帮助查询看起来应该是什么样的,以及得分是否与我说的一样。
答案 0 :(得分:1)
您可以将其编入索引为an array,例如:
{
"myArrayField": [ "str1", str2", str3", "str4", "str5" ],
...
}
然后,您可以查询多种方式,最简单的方法是match query(已分析):
{
"match" : {
"myArrayField" : "str1 str2 str3"
}
}
或terms query(未分析):
{
"terms" : {
"myArrayField" : [ "str1", "str2", "str3" ]
}
}
并且是,与更多查询字词匹配将获得更高的分数,因此记录1的得分将高于记录2.