ES查询中terms查询条件太多处理方法,Terms Lookup语法
terms-lookup语法使用terms可以进行多值查询, 只要目标文档匹配terms查询中的一个值, 此文档就会被标记为查询结果中的一个, 但terms的参数值是有限制的, 默认65535个元素, 你可以通过设置index.max_terms_count来进行更改. 我们还可以通过terms lookup语法来解决terms参数元素过多的情况terms lookup参数说明:index: 参数
·
terms-lookup语法
使用terms可以进行多值查询, 只要目标文档匹配terms查询中的一个值, 此文档就会被标记为查询结果中的一个, 但terms的参数值是有限制的, 默认65535个元素, 你可以通过设置index.max_terms_count来进行更改. 我们还可以通过terms lookup语法来解决terms参数元素过多的情况
terms lookup参数说明:
- index: 参数值存储的索引名称
- id: 参数值存储的文档id
- path: 参数值存储的字段名称
- routing: 参数对应的文档的路由值, 如果索引该文档时没有指定, 该参数可以不设置值, 如果文档索引时被指定了路由, 则该参数必须指定
示例如下:
// 创建一个目标查询索引
PUT my-index-000001
{
"mappings": {
"properties": {
"color": { "type": "keyword" }
}
}
}
PUT my-lookup
{
"mappings": {
"properties": {
"param": { "type": "keyword" }
}
}
}
PUT my-index-000001/_doc/1
{
"color": ["blue", "green"]
}
PUT my-index-000001/_doc/2
{
"color": "blue"
}
PUT my-lookup/_doc/1
{
"param": ["blue", "green"]
}
// 查询语法
// 从my-lookup中找到文档id为1的文档, 拿出其param的值作为terms的查询条件, 在my-index-000001查询
GET my-index-000001/_search?pretty
{
"query": {
"terms": {
"color" : {
"index" : "my-lookup",
"id" : "1",
"path" : "param"
}
}
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)