elastic(10) 基本查询

Posted 一只宅男的自我修养

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elastic(10) 基本查询相关的知识,希望对你有一定的参考价值。

# 指定index名以及type名的搜索
GET /library/books/_search?q=title:elasticsearch

# 指定index名没有type名的搜索
GET /library/_search?q=title:mongodb

# 既没有index名也没有type名的搜索
GET /_search?q=title:elasticsearch



#------------------------------------------------
# term查询

# term查询:查询某字段里有某个关键词的文档
GET /library/books/_search
{
  "query": {
    "term": {
        "preview": "elasticsearch"
    }
  }
}

# terms查询:查询某个字段里有多个关键词的文档
# minimum_match:最小匹配集;1 说明两个关键词里最少有一个,2 就说明文档里这两个关键词都得存在
GET /library/books/_search
{
  "query": {
    "terms": {
        "preview": ["elasticsearch","book"],
        "minimum_match": 2
    }
  }
}

#------------------------------------------------
# 控制查询返回的数量

# from 和 size
# 相当于mysql里的limit
# from : 从哪个结果开始返回
# size : 定义返回最大的结果数
GET /library/books/_search?q=title:elasticsearch

GET /library/books/_search
{
  "from":1,
  "size":2,
  "query": {
    "term": {
        "title": "elasticsearch"
    }
  }
}


#------------------------------------------------
#

# 返回版本号_version

GET /library/books/_search
{
  "version": true,
  "query": {
    "term": {
        "preview": "elasticsearch"
    }
  }
}


#------------------------------------------------
# match查询


# match查询可接受文字,数字日期等数据类型
# match跟term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程

GET /library/books/_search
{
  "query": {
    "match": {
        "preview": "elasticsearch"
    }
  }
}

GET /library/books/_search
{
  "query": {
    "match": {
        "price": 11
    }
  }
}

# 通过match_all查询
# 查询指定索引下的所有文档
GET /library/books/_search
{
  "query": {
    "match_all": {}
  }
}

# 通过match_phrase查询
# 短语查询,slop定义的是关键词之间隔多少未知单词
GET /library/books/_search
{
  "query": {
    "match_phrase": {
      "preview": {
         "query": "Elasticsearch , distributed",
         "slop": 2
      }
    }
  }
}

# multi_match查询
# 可以指定多个字段
# 比如查询title和preview这两个字段里都包含Elasticsearch关键词的文档
GET /library/books/_search
{
  "query": {
    "multi_match": {
        "query": "Elasticsearch",
        "fields": ["title", "preview"]
    }
  }
}



#------------------------------------------------
#

# 指定返回的字段
# 注意只能返回store为yes的字段
GET /library/books/_search
{
  "fields": ["preview","title"],
  "query": {
    "match": {
        "preview": "elasticsearch"
    }
  }
}


# 通过partial_fields控制加载的字段
GET /library/books/_search
{
  "partial_fields": {
    "partial": {
      "include": ["preview"],
      "exclude": ["title,price"]
    }
  },
  "query": {
    "match_all": {}
  }
}

# 还能加通配符 *
GET /library/books/_search
{
  "partial_fields": {
    "partial": {
      "include": ["pr*"],
      "exclude": ["tit*"]
    }
  },
  "query": {
    "match_all": {}
  }
}


#------------------------------------------------
# 排序

# 通过sort把结果排序
# desc 降序
# asc 升序
GET /library/books/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

GET /library/books/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ]
}



#------------------------------------------------
#

# prefix 前缀匹配查询
GET /library/books/_search
{
  "query": {
    "prefix": {
      "title": {
        "value": "r"
      }
    }
  }
}



#------------------------------------------------
# 控制范围

# range 查询:范围查询
# 有from , to , include_lower , include_upper , boost这些参数
# include_lower:是否包含范围的左边界,默认是true
# include_upper:是否包含范围的右边界,默认是true

GET /library/books/_search
{
  "query": {
    "range": {
      "publish_date": {
        "from" : "2015-01-01",
        "to" : "2015-06-30"
      }
    }
  }
}

GET /library/books/_search
{
  "query": {
    "range": {
      "price": {
        "from" : "11",
        "to" : "20",
        "include_lower" : true,
        "include_upper" : true
      }
    }
  }
}



#------------------------------------------------
#


# wildcard查询:允许你使用通配符 * 和 ? 来进行查询
# * 就代表一个或多个字符
# ? 仅代表一个字符
# 注意:这个查询很影响性能
GET /library/books/_search
{
  "query": {
    "wildcard": {
      "preview": "rab*"
    }
  }
}

GET /library/books/_search
{
  "query": {
    "wildcard": {
      "preview": "luc?ne"
    }
  }
}



#------------------------------------------------
#

# fuzzy模糊查询
# value : 查询的关键字
# boost : 设置查询的权值,默认是1.0
# min_similarity : 设置匹配的最小相似度        默认值为0.5;对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型,取值为1d,2d,1m这样,1d就代表一天。
# prefix_length : 指明区分词项的共同前缀长度,默认是0
# max_expansions : 指明查询中的词项可扩展的数目,默认可以无限大。

GET /library/books/_search
{
  "query": {
    "fuzzy": {
      "preview": "rabit"
    }
  }
}

GET /library/books/_search
{
  "query": {
    "fuzzy": {
      "preview" :{
        "value": "rabit",
        "min_similarity" : 0.5
      }
    }
  }
}

# fuzzy_like_this 查询
# 查询得到与给定内容相似的所有文档
# fileds : 字段组,默认是_all
# like_text : 设置关键词
# ignore_tf : 设置忽略词项的频次,默认是false
# max_query_terns : 指明在生成的查询中查询词项的最大数目。默认是25
# min_similarity : 指明区分词项最小的相似度,默认是0.5
# prefix_length : 指明区分词项共同前缀的长度,默认是0
# boost : 设置权值,默认是1.0
# analyze : 指明用于分析给定内容的分析器

GET /library/books/_search
{
  "query": {
    "fuzzy_like_this": {
      "fields": ["preview"],
      "like_text": "open source software",
      "min_similarity" : 0.5,
      "prefix_length" : 0.2
    }
  }
}

# fuzzy_like_this_field 查询
# 只作用在一个字段里
# 其他与fuzzy_like_this功能一样
GET /library/books/_search
{
  "query": {
    "fuzzy_like_this_field": {
      "preview": {
        "like_text": "open source software",
        "min_similarity" : 0.5,
        "prefix_length" : 0.2
      }
    }
  }
}



#------------------------------------------------
# more_like_this查询


# fields : 定义字段组,默认是_all
# like_text : 定义要查询的关键词
# percent_terms_to_match : 该参数指明一个文档必须匹配多大比例的词项才被视为相似。默认值是0.3,意思是30%的比例
# min_term_freq : 该参数指明在生成的查询中查询词项的最大数目。默认为25
# stop_words : 该参数指明将被忽略的单词集合
# min_doc_freq : 该参数指明词项应至少在多少个文档中出现才不会被忽略。默认是5
# max_doc_freq : 该参数指明出现词项的最大数目,以避免词项被忽略。默认是无限大
# min_word_len : 该参数指明单个单词的最小长度,低于该值的单词将被忽略,默认值是0
# max_word_len : 指明单个单词的最大长度,高于该值的单词将被忽略,默认是无限大
# boost_terms : 该参数指明提升每个单词的权重时使用的权值。默认是1
# boost : 指明提升一个查询的权值,默认是1.0
# analyer : 指定用于分析的分析器

GET /library/books/_search
{
  "query": {
    "more_like_this": {
        "fields": ["preview"],
        "like_text": "Apache open source",
        "min_term_freq" : 1,
        "min_doc_freq" : 1
    }
  }
}

# more_like_this_field 查询
# 只作用在一个字段里
# 其他与more_like_this功能一样
GET /library/books/_search
{
  "query": {
    "more_like_this_field": {
      "preview": {
        "like_text": "Apache open source",
        "min_term_freq" : 1,
        "min_doc_freq" : 1
      }
    }
  }
}

 

以上是关于elastic(10) 基本查询的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Elastic Map Reduce:输入片段大小是不是重要

elastic search 常用查询

在 Java 的 GraphQL 查询中添加片段

Huawei_Netconf_Ncclient

Laravel 5.8 有条件地插入 sql 片段

Day121.ElasticSearch:概述安装基本操作DSL高级查询