怎么不花钱建网站,登陆不了建设银行网站,游戏工作室加盟平台,wap网站和app开发文章目录 Getting Startedmatch_all查询全部sort排序from\size分页_source指定字段 match匹配查询match_phrase短语匹配multi_match多字段匹配range范围查询bool复合查询must必须匹配#xff0c;可贡献得分must_not必须不匹配#xff0c;可贡献得分should可有可无#xff0c… 文章目录 Getting Startedmatch_all查询全部sort排序from\size分页_source指定字段 match匹配查询match_phrase短语匹配multi_match多字段匹配range范围查询bool复合查询must必须匹配可贡献得分must_not必须不匹配可贡献得分should可有可无可贡献得分不影响记录数filter条件再过滤不贡献得分 term和matchmatch_phrase 和 .keyword Query DSL:Elasticsearch 提供了一个可以执行查询的JSON 风格的 DSL (domain-specific language 领域特定语言。这个被称为 Query DSL。
ES 支持两种基本方式检索通俗的讲第二种检索方式的请求体就是DSL语言
一个是通过使用 REST request URI 发送检索参数ur检索参数另一个是通过使用 REST request body 来发送它们uri请求体
接下来的实验操作都是基于测试数据(account.json)进行的。
Getting Started
match_all查询全部
GET /bank/_search
{query:{match_all: {}}
}sort排序
query:指定查询的条件 sort进行排序
GET /bank/_search
{query: {match_all: {}},sort: [{FIELD: {order: desc}}]
} from\size分页
默认每次查询10条数据,可以使用from和size指定每页的记录数,下面的DSL表示每页查询5条数据这是第一页 from(pageNum-1) * pageSize
GET /bank/_search
{query: {match_all: {}},sort: [{balance: {order: asc}}],from: 0,size: 5
}_source指定字段
_source可以指定结果集中只显示哪些字段
GET /bank/_search
{query: {match_all: {}},sort: [{balance: {order: asc}}],_source: [firstname,lastname,gender], from: 5,size: 5
}match匹配查询
基本语法如下所示
GET /bank/_search
{query: {match: {FIELD: TEXT}}
}如果match匹配非字符串字段那么就是精确查询如果match匹配字符串字段,那么就是模糊查询,也叫全文检索
# 匹配非字符串字段就是精确查询
GET /bank/_search
{query: {match: {account_number: 20}}
}
# 匹配字符串字段就是模糊查询
# 查询出19条数据它是分词查询这些记录按照各自的评分进行排序
GET /bank/_search
{query: {match: {address: mill lane}}
}match_phrase短语匹配
前面使用match匹配查询address: mill lane它是进行的分词查询如下图 但有时候就需要将mill lane作为一个整体(短语)进行匹配这个时候就可以使用match_phrase进行匹配它会将mill lane作为整体只要Value中包含mill lane就会被匹配成功
GET /bank/_search
{query: {match_phrase: {address: mill lane}}
}multi_match多字段匹配
比如期望查询出address或state这两个字段中都包含mill就好比SQL的如下语句
select * from table_name where address like %mill% or state like %mill%基本语法格式如下所示其中query用来指定匹配的值fields用来指定将从哪些字段中去匹配该值
GET /bank/_search
{query: {multi_match: {query: ,fields: []}}
}多字段匹配的时候会不会进行分词查询呢
range范围查询
基本格式
GET bank/_search
{query: {range: {FIELD: {gte: 10,lte: 20}}}
}bool复合查询
bool用来做复合查询复合语句可以合并任何其他查询语句包括复合语句了解这一点很重要的这就意味着复合语句之间可以相互嵌套可以表达非常复杂的逻辑
must必须匹配可贡献得分 must必须达到must列举的所有条件并将有助于得分 期望查询出gender’M‘并且address中包含’mill‘的记录
# select * from table_name where genderM and address like %mill%
GET bank/_search
{query: {bool: {must: [{match: {gender: M}},{match: {address: mill}}]}},_source: [gender,address]
}must_not必须不匹配可贡献得分
记录一下格式注意层级格式
# gender‘M’ and address like %mill% and age 28
GET bank/_search
{query: {bool: {must: [{match: {gender: M}},{match: {address: mill}}],must_not: [{match: {age: 28}}]}},_source: [gender,address,age]
} should可有可无可贡献得分不影响记录数 should:表示可有可无如果匹配上就会提高该记录的得分如果没有匹配上也不会影响查询结果集的数量 filter条件再过滤不贡献得分
前面的must、must_not筛选出满足条件的记录并贡献得分should不会对满足must、must_not的记录数产生任何影响但是它会对匹配should条件的记录贡献得分而filter却不会贡献得分只会在must、must_not的基础上对结果进行再过滤。
如下在满足must的基础上再筛选出age大于10并且小于30的记录GET bank/_search
{query: {bool: {must: [{match: {gender: M}},{match: {address: mill}}],filter: [{range: {age: {gte: 10,lte: 30}}}]}},_source: [age,lastname,address]
}term和match
term 和 match 一样。匹配某个属性的值。只是全文检素(text)字段用 match其他非text 字段匹配用 term。
match_phrase 和 .keyword
match_phrase:只要包含该短语就会被匹配上***.keyword: 必须是精确匹配
下图使用address字段进行了验证