es的几种查询

在 es 里有两种存储字符串的字段类型,一个是 keyword,一个是 text。

keyword 在存储数据的时候是作为一个整体存储的,不会对其进行分词处理

text 存储数据的时候会对字符串进行分词处理,然后存储。

        

type为keyword的字段,检索时检索词不会被分词,存入es时也不会被分词,所以哪怕使用的是match查询,检索时检索词不会被分词。

        可以通过_anlyze接口分析字段在建立倒排索引时的分词情况

GET zl_file_task/_analyze
{
  "text":"解析成功",
  "field": "status"
}

        结果:

{
  "tokens" : [
    {
      "token" : "解",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "<IDEOGRAPHIC>",
      "position" : 0
    },
    {
      "token" : "析",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "成",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "<IDEOGRAPHIC>",
      "position" : 2
    },
    {
      "token" : "功",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    }
  ]
}

1. math查询(分词匹配查询)

        match查询是按ES分词的倒排表进行查询,而keyword不会被分词,match的需要跟keyword的完全匹配可以。可以用于一般性的匹配查询。

1.1 match_all

        match_all可以用于查询全部信息。

1.2 match

        mathc是单个字段进行分词匹配查询。

1.3 multi_match

        multi_match是多字段进行匹配查询。

GET zl_file_task/_search
{
	"query":{
		"multi_match":{
			"query":"解析成功",
			"fields":["status","content"]
		}
	}
}

结果中只要status或者content中有一个满足条件即可

1.4 match_phrase

        在执行短语匹配查询时,ElasticSearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,使用这个方法不加其他参数的情况下,可以看作是会匹配包含这个短语、且顺序一致的数据。如“解析成功”存放时会被分为“解”、“析”、“成”、“功”四个词,若查询“解析”、“析成”则可以匹配成功,但若查询“析解”、“解成”则匹配失败

但是 match_phrase 有一个 slop 参数可以用于忽略这种顺序,也就是允许搜索的关键词错位的个数。

2. term查询

term是ES中的精准查询,不会参与ES分词查询。

核心点:检索词不会被分词,作为一个Token/term

term查询时,检索词不会分词,将检索词与所查字段的分词进行比对,满足要求时即可返回。

在对于搜索的 text 字段后加上 .keyword 字段的操作,可以理解成是使用 term 来搜索 keyword 字段。

3. fuzzy查询(模糊查询)

fuzzy查询可以用于纠正去拼写的问题。

fuzziness是可以允许纠正错误拼写的个数

GET zl_file_task/_search
{
	"query":{
		"fuzzy": {
		  "status": {
		    "value": "你",
		    "fuzziness": 1
		  }
		}
	}
}

只查询一个词,允许拼写错一个,即查询全部

4. wildcard(通配符查询)

通配符查询允许我们指定一个模式来匹配,而不需要指定完整的trem,匹配的方式类似于match的分词匹配查询。

?将会匹配如何字符;*将会匹配零个或者多个字符。

GET zl_file_task/_search
{
	"query":{
		"wildcard": {
		  "status": "*解"
		}
	}
}

5. bool查询(布尔查询)

bool查询本身没有查询功能,而是基于逻辑值使用前面几种查询方式进行组合查询。

2.1 should查询

GET zl_file_task/_search
{
	"query":{
		"bool": {
		  "should": [
		    {},
		    {}
		  ]
		}
	}
}

2.2 must查询

GET zl_file_task/_search
{
	"query":{
		"bool": {
		  "must": [
		    {},
		    {}
		  ]
		}
	}
}

6.取特定字段

GET zl_file_task/_search
{
  "_source": ["task_name","status"], 
  "query": {
    "match": {
      "status.keyword": "解析成功"
      }
    }
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值