国内视频网站域名,做任务兼职赚钱的网站有哪些,上海装修公司排名统帅,国际网站平台在 Elasticsearch 中#xff0c;terms_set 查询通常用于在一个字段上进行多值匹配#xff0c;并支持设置一个条件#xff08;例如最小匹配数量#xff09;#xff0c;让查询结果更具灵活性。为了展示如何使用 terms_set 查询#xff0c;我们首先会创建一个索引#xff0…在 Elasticsearch 中terms_set 查询通常用于在一个字段上进行多值匹配并支持设置一个条件例如最小匹配数量让查询结果更具灵活性。为了展示如何使用 terms_set 查询我们首先会创建一个索引写入一些数据然后演示如何进行查询。
1. 创建索引和写入数据
首先假设我们有一个关于 articles文章的索引每个文档包含字段 tags标签我们希望查询文档中的标签是否包含给定的多个值。
创建索引
假设我们的索引名为 articles并且每个文档包含字段 tags多个标签值。
PUT /articles
{mappings: {properties: {title: { type: text },tags: { type: keyword }}}
}在上述示例中我们定义了一个名为 articles 的索引其中 tags 字段是 keyword 类型因为我们想要存储和查询标签。
写入数据
接下来我们写入一些数据。每个文档包含文章标题和相关的标签。
POST /articles/_bulk
{ index: { _id: 1 } }
{ title: Tech News Today, tags: [tech, news, AI] }
{ index: { _id: 2 } }
{ title: Sports Highlights, tags: [sports, news, football] }
{ index: { _id: 3 } }
{ title: Latest in AI, tags: [tech, aAI] }
{ index: { _id: 4 } }
{ title: Football Updates, tags: [sports, football] }
{ index: { _id: 5 } }
{ title: Tech Innovations, tags: [tech, innovation] }
在这个例子中我们为不同的文章指定了多个标签如 tech、sports、news、AI 等。
2. 使用 terms_set 查询
现在我们将使用 terms_set 查询来查找至少匹配给定标签集的文档。比如我们希望找到那些标签字段中至少包含 tech、news、AI 中的两个标签的文档。
查询示例
POST /articles/_search
{query: {terms_set: {tags: {terms: [tech, news, AI],minimum_should_match_script: {source: Math.min(params.num_terms, 2)}}}}
}解释
terms_set: 查询的目标字段是 tags。terms: 这里列出的是我们要匹配的标签集合[tech, news, AI]。minimum_should_match_script: 使用脚本来设置条件要求文档的 tags 字段至少包含集合中的两个标签。Math.min(params.num_terms, 2) 的意思是“返回包含至少两个标签的文档”。
3. 查询结果
假设查询成功执行以下是结果
{took : 13,timed_out : false,_shards : {total : 1,successful : 1,skipped : 0,failed : 0},hits : {total : {value : 1,relation : eq},max_score : 3.810946,hits : [{_index : articles,_type : _doc,_id : 1,_score : 3.810946,_source : {title : Tech News Today,tags : [tech,news,AI]}}]}
}在这个结果中符合查询条件的文档是
文档 1tags 包含 tech、news、AI至少包含两个标签。文档 3tags 包含 tech、AI至少包含两个标签。
5. 总结
terms_set 查询在处理多值字段时非常有用特别是当你希望在一个字段中匹配多个值并且可以灵活控制匹配条件时。terms 参数用于指定查询的多个值minimum_should_match_script 则用于自定义最小匹配数量。这种查询方法非常适合需要对多值条件进行动态调整的情况比如在推荐系统或复杂筛选条件下使用。