查询
Elasticsearch是功能非常强大的全文搜索引擎,用它的目的就是为了能快捷的查询你想要的数据
基本查询:利用Elasticsearch内置查询条件进行查询
组合查询:把多个基本查询组合在一起的复合性查询
过滤:查询同时,通过filter条件在不影响打分的情况下筛选出想要的数据
Elasticsearch查询的过程:通过匹配条件,把索引里面分析好的结果提取的过程,索引的分析依靠分词器,通过分词器可以将索引中的字符串词条化,通过Elasticsearch设定好的查询语句,给定关键词和相关的过滤条件,就能拿到我们想要的结果。
测试内容(未整理)
基本查询
term,terms查询
from,size
返回版本号_version
match 查询
升序降序
prefix前缀匹配查询
range范围查询
wildcard通配符查询
fuzzy模糊查询
more_like_this & more_like_this_field查询
#查看测试数据
GET /library/books/_mget
{
"ids": {"1","2","3","4","5","6","7","8"}
}
#查看library的mapping信息
GET /library/_mapping
#查看shakespeare的mapping信息
GET /shakespeare/_mapping
#简单查询
#指定index名以及type名的搜索
GET /library/books/_search?q=title:elasticsearch
#指定index名没有type名的搜索
GET /library/_search?q=title:mongodb
#既没有index名也没有type名的搜索
GET /_search?q=title:elasticsearch
#搜索结果内容介绍
#_source:文档具体内容
#_score:分数,Elasticsearch给查询的结果打分
#max_score:最高分
#term查询
#term查询:查询某字段里有某个关键词的文档
GET /library/books/_search
{
"query": {
"term": {
"preview": "elasticsearch"
}
}
}
#term查询:查询某字段里有多个关键词的文档
#minimum_match: 最小匹配集;1 说明两个关键词里最少有一个,2 就说明文档里这两个关键词都得存在。
GET /library/books/_search
{
"query": {
"term":{
"preview": ["elasticsearch","book"],
"minimum_match":1
}
}
}
#控制查询返回的数量
#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":{
"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"],
"query": {
"match": {
"preview": "elasticsearch"
}
}
}
通过partial_fields控制加载的字段
GET /library/books/_search
{
"partial_fields":{
"partial":{
"include": ["preview"],
"exclude":["tittle,price"]
}
},
"query": {
"match_all":{}
}
}
#还能加通配符 *
GET /library/books/_search
{
"partial_fields":{
"partial":{
"include": ["pri*"]
"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":{
}
}
}
}
GET /library/books/_search
{
"query": {
"range":{
"price": {
"from":"10",
"to":"20",
"include_lower": true,
"include_upper": false
}
}
}
}
#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": "rabbit",
"min_similarity": 0.5
}
}
}
}
#fuzzy_like_this查询
#查询得到与给定内容相似的所有文档
#fields: 字段组,默认是_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
#analyzer:指定用于分析的分析器
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
}
}
}
}
网友评论