在Elastic中搜索String数组中的多个值

时间:2016-09-15 17:56:10

标签: elasticsearch lucene

我有一个字段,我正在索引到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中只有两个字符串)。

这有可能吗?你可以帮助查询看起来应该是什么样的,以及得分是否与我说的一样。

1 个答案:

答案 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.