2016-09-15 71 views
0

我有一个字段,我索引到Elasticsearch是一个字符串数组。因此,举例来说,这里是字符串数组将是什么样子的两项纪录:在弹性搜索字符串数组中的多个值

Record 1: {"str1", str2", str3", "str4", "str5"} 

Record 2: {"str1", str2", str6", "str7", "str8"} 

问题1:我希望能够查询此数组中多个字符串。对于例如我的查询有“str1”,“str2”。 “str3”作为搜索参数。我想搜索在字符串数组有任何这三个串

问题2的记录:对于上述情形会记录1回用更高的分数比创纪录的(因为所有这三个字符串数组中记录1,但记录2中只有两个)。

这可能吗?你可以请求帮助,查询应该是什么样子,如果得分符合我说的方式。

回答

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的记录。