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