elasticsearch查询操作(使用marvel插件)

star2017 1年前 ⋅ 600 阅读

Elasticsearch是功能非常强大的全文搜索引擎,用它的目的就是为了能更快速的查询你想要的数据

基本查询:利用Elasticsearch内置查询条件进行查询

组合查询:把多个基本查询组合在一起的复合型查询

过滤:查询同时,通过filter条件在不影响打分的情况下筛选出想要的数据


1.基本查询

1)term,terms查询

2)from,size

3)返回版本号_version

4)match查询

5)升序降序

6)prefix前缀匹配查询

7)range范围查询

8)wildcard通配符查询

9)fuzzy模糊查询

10)more_like_this & more_like_this_field 查询

1.1简单的查询的案例:

1)指定index名以及type名的搜索

GET /library/books/_search?q=title:elasticsearch
q是query的简写,title是文档的字段
以上意义:查询library索引下,books的type下书名为elasticsearch的对象

2)指定index名没有type名的搜索

GET /library/_search?q=title:mongodb
解释同上一个

3)既没有index名,也没有type名的搜索

GET /_search?q=title:elasticsearch

1.2 terms查询

term查询:查询某个字段里有某个关键词 的文档

方式一:
GET /library/books/_search
{
  "query":{
    "term": {
      "title": {
        "value": "elasticsearch"
      }
    }
  }
}
方式二:
GET /lilbrary/books/_search
{
  "query":{
    "term": {
      "title": "elasticsearch"
    }
  }
}

terms查询:查询某个字段里有多个关键词的文档

minimum_match : 最小匹配集;1.说明两个关键词里最少有一个,2 就说明文档里这两个关键词都得存在

GET /lilbrary/books/_search
{
  "query": {
    "terms": {
      "title": [
        "elasticsearch",
        "the"
      ],
      "minimum_match": 1
    }
  }
}

1.3控制查询返回的数量

是通过from和size

相当于mysql里面的limit

from:从哪个结果开始返回

size:定义返回最大的结果数

1)

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

1.4返回版本号

在查询里面添加一个 _version : true就可以了

示例:

GET /lilbrary/books/_search
{
  "version": true,
  "query": {
    "term": {
      "title": {
        "value": "elasticsearch"
      }
    }
  }
}

1.5match查询

match查询可接受文字,数字日期等数据类型

match跟term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程

示例:

GET /lilbrary/books/_search
{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}

match_all

通过match_all查询

查询指定索引下的所有文档

示例:

GET /lilbrary/books/_search
{
  "query": {
    "match_all": {}
  }
}

match_phrase

通过match_phrase查询

短语查询,slop定义的是关键词之间隔多少未知单词

示例:

GET library/books/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "elasticearch , guide",
        "slop":3
      }
    }
  }
}

multi_match查询

可以指定多个字段

比如查询title和preview这两个字段里都包含了elasticsearch关键词的文档

示例:

GET  /lilbrary/books/_search
{
  "query": {
    "multi_match": {
      "query": "elasticsearch",
      "fields": ["title","priview"]
    }
  }
}

 1.6指定返回的字段

注意只能返回store为yes的字段

示例:

GET /lilbrary/books/_search
{
  "fields":["title"],
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}

 partial_fields

通过partial_fields控制加载的字段

GET /lilbrary/books/_search
{
  "partial_fields": {
    "partial": {
      "include": ["title"],
      "exclude": ["publicsh_date,price"]
    }
  },
  "query": {
    "match_all": {}
  }
}

*

通配符的添加 * 

GET /lilbrary/books/_search
{
  "partial_fields": {
    "partial": {
      "include": ["ti*"],
      "exclude": ["publicsh_date,price"]
    }
  },
  "query": {
    "match_all": {}
  }
}

1.7排序

通过sort把结果排序

desc 降序

asc 升序

示例:

降序

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

升序:

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

1.8prefix前缀匹配查询

示例:

值内容是整个内容的开始部分

GET lilbrary/books/_search
{
  "query": {
    "prefix": {
      "title": {
        "value": "e"
      }
    }
  }
}

1.9控制范围

range查询:范围查询

有from, to , include_lower, include_upper , boost这些参数

include_lower:是否包含范围的左边界,默认是true

include_upper:是否包含范围的右边界,默认是true

示例:

GET /lilbrary/books/_search
{
  "query": {
    "range": {
      "publicsh_date": {
        "from": "2019-08-08",
        "lte": "2019-08-30"
      }
    }
  }
}

GET /lilbrary/books/_search
{
  "query": {
    "range": {
      "price": {
        "from": 10,
        "to": 59.99,
        "include_lower":true,
        "include_upper":true
      }
    }
  }
}

1.10wildcard通配符查询
wildcard查询:允许你使用通配符 * 和 ? 来进行查询

* 就代表一个或多个字符

?仅代表一个字符

注意:这个查询很影响性能

GET /lilbrary/books/_search
{
  "query": {
    "wildcard": {
      "title": {
        "value": "ela*rch"
      }
    }
  }
}


GET /lilbrary/books/_search
{
  "query": {
    "wildcard": {
      "title": {
        "value": "ela*ticsearch"
      }
    }
  }
}

1.11fuzzy模糊查询

value : 查询的关键字

boost :设置查询的权值,默认是1.0

min_similarity : 设置匹配的最小相似度

默认值为0.5 ;对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型,取值为1d,2d,1m这样,1d就代表一天。

prefix_length :指明区分词的共同前缀长度,默认是0

max_expansions : 指明查询中的词项可扩展的数目,默认可以无限大

注意:查询很耗资源

GET /lilbrary/books/_search
{
  "query": {
    "fuzzy": {
      "title":"elasticsearch"
    }
  }
}

GET /lilbrary/books/_search
{
  "query": {
    "fuzzy": {
      "title":{
        "value": "elasticsearch",
        "min_similarity": 0.5
      }
    }
  }
}

fuzzy_like_this 查询

查询得到与给定内容相似的所有文档

fields : 字段组,默认是_all

like_text : 设置关键词

ignore_tf : 设置忽略词项的频次,默认是false

max_query_terms : 指明在生成的查询中查询词项的最大数目。默认是25

min_similarity : 指明区分词项最小的相似度,默认是0.5

prefix_length: 指明区分词项共同前缀的长度,默认是0

boost :设置权值,默认是1.0

analyze : 指明用于分析给定内容的分析器

GET lilbrary/books/_search
{
  "query": {
    "fuzzy_like_this": {
      "fields": ["title"],
      "like_text": "elasticsearch",
      "min_similarity": 0.5,
      "prefix_length":0.2
    }
  }
}

fuzzy_like_this_field 查询

只作用在一个字段里

其他与fuzzy_like_this功能一样

GET lilbrary/books/_search
{
  "query": {
    "fuzzy_like_this_field": {
      "title":{
        "like_text":"elasticsearch",
        "min_similarity":0.5,
        "prefix_length":0.2
      }
    }
  }
}

1.12more_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

analyzer:指定用于分析的分析器

GET lilbrary/books/_search
{
  "query": {
    "more_like_this": {
      "fields": ["title"],
      "like_text": "elasticsearch",
      "min_term_freq": 1,
      "min_doc_freq":1
    }
  }
}

more_like_this_field查询

只作用在一个字段里

其他与more_like_this功能一样

GET lilbrary/books/_search
{
  "query": {
    "more_like_this_field": {
      "title": {
        "like_text": "elasticsearch",
        "min_term_freq": 1,
        "min_doc_freq":1
      }
    }
  }
}






更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: