美文网首页
ElasticSearch第六篇:高级查询

ElasticSearch第六篇:高级查询

作者: 小螺丝钉cici | 来源:发表于2019-10-22 12:44 被阅读0次

子条件查询:特定字段查询所指特定值
复合条件查询以一定的逻辑组合子条件查询

子条件查询

Query context:

在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_socre来标识匹配的程度,旨在判断文档和查询条件匹配的有多好。
(匹配度为多少)

常用查询:
1)全文本查询:针对文本类型数据(模糊匹配,习语匹配,多个字段的匹配查询)
2)字段级别查询:针对结构化数据,如数字,日期等

  • 1.1)全文本查询-模糊匹配
image.png
{
    "query":{
        "match":{
            "first_name":"小枫cici"
        }
    }
}
这种查询语法会匹配出4条数据;小枫cici /cici  / 小枫
它将小枫cici 拆开了小枫/cici两个词语。只要能匹配的都查询出来了
  • 1.2)全文本查询-习语匹配:只想要查询出 “小枫cici”的全部匹配结果,用习语匹配match_phrase
{
    "query":{
        "match_phrase":{
            "first_name":"小枫cici"
        }
    }
}
此时就只匹配了id=5的这一条数据
  • 1.3)全文本查询- 多个字段的匹配查询 multi_match
{
    "query":{
        "multi_match":{
            "query": "小枫cici",
            "fields": ["last_name" , "first_name"]
        }
    }
}
  • 1.4)全文本查询-语法查询 query_string
// 匹配出“小枫”字符串
{
    "query":{
        "query_string":{
            "query": "小枫"
    
        }
    }
}
// 匹配出“小枫” 或者“cici”字符串
{
    "query":{
        "query_string":{
            "query": "cici OR 小枫"
    
        }
    }
}

  • 1.5)全文本查询-多字段匹配
{
    "query":{
        "query_string":{
            "query": "cici OR 24",
            "fields":["first_name","age"]
        }
    }
}
  • 2.1)字段级别查询-结构化数据
查询年龄为100的数据
{
    "query":{
        "term":{
            "age": 100
        }
    }
}
查询年龄>=20,<100的数据
{
    "query":{
        "range":{
            "age": {
                "gte":20,
                "lt":100 // lt小于; lte小于等于 ;e=equals
            }
        }
    }
}
Filter context

filter 对数据进行过滤的。并且对数据进行缓存,比query速度快,性能高一些。
在查询过程中,只判断该文档是否满足条件,只有 Yes 或者 No。

// 只查询年龄=100的数据
{
    "query":{
        "bool":{
            "filter": {
                "term":{
                    "age":100
                }
            }
        }
    }
}

复合条件查询

{
    "query":{
        "match":{
            "first_name":"cici"
            }
        }
}

查询出来的数据分数不一样。 
_score": 0.18232156,"_score": 0.2876821,
  • 固定分数查询,将查询的分数固定下来
    constant_score 不支持 match只支持filter
{
    "query":{
        "constant_score":{
            "filter":{
                "match":{
                    "first_name":"cici"
                }
                }
        
            }
        }
}
跟上面返回的数据一致;但score都是1
  • 指定分数
{
"query":{
        "constant_score":{
            "filter":{
                "match":{
                    "first_name":"cici"
                    }
                },
                "boost":2
        
            }
        }
}
跟上面返回的数据一致;但score都是2
  • 布尔查询
    should 应当满足;只要满足其中一个条件即可——或or
    must 必须都满足;——且And
    must_not 一定不满足
{
    "query":{
        "bool":{
            "should":[
                {
                "match":{
                    "first_name":"cici"
                }
                },
                {
                 "match":{
                    "age":"28"
                }
                }
                ]
        
            }
        }
}
  • must /filter 必须满足并且过滤数据
{
    "query":{
        "bool":{
            "must/must_not":[ //此处两个语法都可用
                {
                "match":{
                    "first_name":"小枫"
                        }
                },
                {
                 "match":{
                    "age":"28"
                        }
                    }
                ],
                "filter":[
                {
                "term":{
                    "last_name":"cici"
                    }
                }
                ]
            }
        }
}

相关文章

网友评论

      本文标题:ElasticSearch第六篇:高级查询

      本文链接:https://www.haomeiwen.com/subject/reolyctx.html