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

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"
                }
            }
        }
    }
}

你可能感兴趣的:(大数据,大数据,elasticsearch)