来到第28天了,却觉得头很痛
ES的收寻知识点有点大,要细讲自己也讲不清楚
要粗讲,可能又讲的不清楚
我的老天那
ES小农经过小小的到处东找西查,最後还是觉得官网最详细,只可惜大量英文....
(中文版只有更新到2.x...看过就觉得直接打上来,可能很多都废弃了)
官网基本将ES的收寻简单分成了五个单元
今天小农就依照这五个单元简单一次就入门吧~
1.1 query context
* 会对搜寻进行算分(_score)
* 使用query关键包裹词语
1. must: 必须符合
2. should: 选择性符合
3. must_not: 必须不符合
2.2 filter context
* 不会对搜寻进行算分,但能够利用暂存更快速取得资料
1. 必须符合
范例语句:
GET /{index}/_search
{
"query":{
"bool":{
//1. 必须住在新北市
"must":{
"term":{
"city":"New Taipei City"
}
},
//2. 年纪必须大於等於35
"must_not":[
{
"range":{
"age":{
"gte":"30"
}
}
}
],
//3. 名字中有Tsai,Jolin,之中一个即可,符合越多分数越高
"should":[
{
"term":{
"name":"Tsai",
}
},
{
"term":{
"name":"Jolin",
}
}
],
//4. 必须爲女性
"filter":{
"term":{
"sex":"women"
}
}
}
}
}
2.1. match
* 将搜索语句经过分词後进行"OR"查询
2.2. match_phrase
* 将搜索语句经过分词後,按照分词顺讯进行"and"搜寻,且可使用slop容许分词间中间间格几个词
(就是分词全要有,且顺序要对)
2.3. match_phrase_prefix
* 对最後一个分词进行通配符搜索,并且可使用max_expansions来设定馍糊比对数控制
其中 max_expansions 最小爲1
2.4. multi_match
* match的多组版本,将每组内容都进行分词後进行"OR"查询
2.5. common terms
* 对不常见的指定分词给与更高的算分
2.6. query_string
* 允许在单个查询字串中使用and,or,not进行多字段搜索
2.7. simple_query_string
* 像前面单元的lucene,直接将语句进行搜寻
{ "id" : 1,"content":"国庆快乐,我爱台湾" }
{ "id" : 2,"content":"我爱台湾,国庆快乐" }
{ "id" : 3,"content":"爱台湾,国庆快乐" }
{ "id" : 4,"content":"国庆快乐,全国爱台湾" }
{
"query":{
"match":{
"content.ik_smart_analyzer":"国庆快乐"
}
}
}
==
mysql where keyWork = 国庆 or keyWork = 快乐
{
"query": {
"match_phrase": {
"content.ik_smart_analyzer": {
"query": "快乐我爱",
"slop":1
}
}
}
}
==
mysql where keyWork = 国庆 and 国庆_Position=0 and keyWork = 我爱 and 我爱_Position=1
{
"query": {
"match_phrase_prefix": {
"content.ik_smart_analyzer": {
"query": "台",
"max_expansions": 1
}
}
}
}
===
mysql where keyWord = 台 or keyWord like “台?”
将搜寻语句进行"分词"的完全配对搜索
{ "id" : 1,"content":"国庆快乐,我爱台湾" }
{ "id" : 2,"content":"我爱台湾,国庆快乐" }
{ "id" : 3,"content":"爱台湾,国庆快乐" }
{ "id" : 4,"content":"国庆快乐,全国爱台湾" }
3.1. term
搜索词不会被分词,必须完全符合
//查无资料因爲没有分词:国庆快乐,我爱台湾
{
"query": {
"term" : { "content" : "国庆快乐,我爱台湾" }
}
}
//id:1~4皆会查出
{
"query": {
"term" : { "content" : "台湾" }
}
}
3.2. terms
等於mysql "in" 将所有该属性符合配对都找出
//id:1~4皆会查出
{
"query": {
"terms" : { "content" : ["国庆","台湾"]}
}
}
3.3. terms_set
至少符合一个或多个分词字段
3.4. range
## //第29篇 基础搜寻的进阶说明
3.5. exists
查询某个属性不爲空的资料
"query": {
"exists" : { "field" : "content" }
}
3.6. prefix
直接搜寻以某字段开头的资料
"query": {
"prefix" : { "content": "国" }
}
//==sql where content like "国%”
3.7. wildcard
"query": {
"wildcard" : { "content": "*国" }
}
//==sql where content like "%国”
"query": {
"wildcard" : { "content": "国?" }
}
//where author like "国_”
3.8. regexp
3.9. fuzzy
拼字错误或容错查询
"query": {
"fuzzy" : {
"author": {
"value": "我碍台湾",
"fuzziness": 1,//最大错别字长度
"prefix_length": 1,//开头至少要对几个字
"max_expansions": 100//最多搜寻结果
}
}
}
3.10. type
7.x被弃用,可能以後被删除
3.11. ids
依据多个id[]来检索文档
原本想将五类都打完
明天来详讲range的花式用法
bool到底是什麽
然後一些常用api吧~
本节说明我在变更单遇到的大小事 1.变更的作法 在AgilePLM中,发起的变更单从新建立时,就可以...
电子助教:「这个标题...我闻到了停刊的味道... (́⊙◞౪◟⊙‵)」 这个章节开始我们要建立「数...
以下笔记摘录自『 The Go Workshop 』。接下来会依序介绍到Golang的集合型别,「阵...
IAM 简介 经过昨天已经设定好了的GCP SDK後,可以开始进入云端世界上的正题溜,首先开始使用G...
前言 今天的daily challenge题目是917. Reverse Only Letters,...