您的位置:首页 > 大数据

大数据学习39:ElasticSearch 常用查询2

2017-12-29 17:01 429 查看
ES常用查询2

1、子条件查询:特定字段查询所指特定值

Query context

在查询中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配程度。

旨在判断目标文档和查询条件匹配的有多好。

常用查询:

(1)、全文本查询:针对文本类型数据

#模糊匹配1
POST 127.0.0.1:9200/book/_search
{
"query":{
"match":{
"author":"wxk"
}
}
}

#模糊匹配2,查询结果显示 ES 和 入门相关的结果
{
"query":{
"match":{ #关键字
"title":"ElasticSearch学习"
}
}
}
结果:只要title 里有 ElasticSearch 或 学习 的都会被搜出来

#phrase 匹配,精确匹配,但是匹配项目是结果的子集
{
"query":{
"match_phrase":{  #关键字
"title":"ElasticSearch入门"
}
}
}

#多字段查询模糊匹配查询,author和title 包含 wxk
{
"query":{
"multi_match":{  #关键字
"query":"wxk",
"fields":["author","title"]
}
}
}

#多条件查询在bool查询中记录

#语法查询
#或语句,全文、模糊搜索
{
"query":{
"query_string":{  #关键字
"query":"(ElasticSearch AND 大法) OR Python"
}
}
}
#语法查询,查多个字段
{
"query":{
"query_string":{  #关键字
"query":"wxk OR ElasticSearch",
"fields":["title","author"]
}
}
}
#多字段的模糊匹配,可以用 AND 达到目标
{
"query":{
"query_string":{  #关键字
"query":"wxk AND ElasticSearch",
"fields":["title","author"]
}
}
}


(2)字段级别查询:针对结构化数据,如数字、日期

#结构化查询,查询数字,日期等
{
"query":{
"term":{  #关键字
"word_count":1000
}
}
}

#结构化查询,查询文本
{
"query":{
"term":{  #关键字
"author":"qsy"
}
}
}

#结构化查询,范围查询数字
{
"query":{
"range":{  #关键字
"word_count":{
"gte":1000,
"lte":2000
}
}
}
}

#结构化查询,范围查询日期
{
"query":{
"range":{  #关键字
"publish_date":{
"gte":"1990-01-01",
"lte":"1990-3-31" # 也可以用 now 关键词
}
}
}
}


2、Filter context

在查询过程中,只判断该文档是否满足条件,只有Yes或者No

filter 一般做过滤,es会对结果进行缓存,相对query会更快,但是要引入bool

#filter 查询
POST 127.0.0.1:9200/book/_search
{
"query":{
"bool":{
"filter":{
"term":{
"word_count":1000
}
}
}
}
}


3、复合条件查询:以一定的逻辑组合子条件查询

固定分数查询

#普通查询:
POST 127.0.0.1:9200/_search
{
"query":{
"match":{
"title":"ElasticSearch"
}
}
}
结果会出现评分,_score
#进行固定分数查询:固定分数查询不支持match,只支持filter
POST 127.0.0.1:9200/_search
{
"query":{
"constant_score":{
"filter":{
"match":{
"title":"ElasticSearch"
}
},
#   "boost":2 这里设置 score 为 2
}
}
}
结果中所有_score 默认都是 1 ,设置boost后为设置的值

#布尔查询 匹配是 或 的关系
{
"query":{
"bool":{
"should": [
{"match":{"author":"qsy"}},
{"match":{"title":"ElasticSearch"}}
]
}
}
}
结果为或

#布尔查询 匹配是 与 的关系
{
"query":{
"bool":{
"must":[
{
"match":{
"author":"qsy"
}
},
{
"match":{
"title":"ElasticSearch"
}
}
]
}
}
}


结果为与

注意:这里 should 匹配的话是模糊匹配,但是 must 的话是精确匹配,例如搜索title的内容,只会去精确匹配 ElasticSearch

#思考,如何多条件模糊匹配呢?
#多字段的模糊匹配,可以用 AND 达到目标
{
"query":{
"query_string":{  #关键字
"query":"wxk AND ElasticSearch",
"fields":["title","author"]
}
}
}

#must,should 组合查询
must,must_not,should每个只能出现一次
{
"query": {
"bool": {
"must":     { "match": { "title": "python" }},
"must_not": { "match": { "publish_date": "1990-2-19"  }},
"should": [
{ "match": { "title": "学习" }},
{ "match": { "author": "qsy"   }}
]
}
}
}

#布尔查询 匹配是 must not 的关系
{
"query":{
"bool":{
"must_not":{
"term":{
"author":"wxk"
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: