具有多个值的过滤字段

时间:2018-11-20 14:06:21

标签: elasticsearch

我将如何解决以下问题: 我想过滤包含多个值(例如[“ value1”,“ value2”,“ value3”])的字段。

过滤器还将包含多个值(例如[“ value1”,“ value2”]。 我只想找回与筛选器具有相同字段值的项目。字段是[“ value1”,“ value2”],过滤器也是[“ value1”,“ value2”]

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

我认为您最近想要添加(v6.1)terms_set query(其中Val引用了他在评论中链接的问题)。

terms_set与常规terms不同,它具有一个参数,用于指定搜索词与字段中包含的词之间必须存在的最小匹配数。

给出:

PUT my_index/_doc/1
{ 
    "values": ["living", "in a van", "down by the river"],
}
PUT my_index/_doc/2
{
    "values": ["living", "in a house", "down by the river"],
}

terms的{​​{1}}查询将返回两个文档:不好。配置为要求全部三个匹配项的["living", "in a van", "down by the river"](脚本terms_set的计算结果为params.num_terms)可以为您提供匹配的一个:

3

注意::在上面的示例中,我使用了GET my_index/_search { "query": { "terms_set": { "values": { "terms": ["living", "in a van", "down by the river"], "minimum_should_match_script": { "source": "params.num_terms" } } } } } ,但这不是一个非常有效的模式。可选的minimum_should_match_script是更好的方法,但是在示例中使用它可能意味着要使用多个PUT将必要的字段添加到文档中,所以我很简洁。