GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
}
}
GET zhifou/doc/_search
{
"query": {
"match_all": {}
}
}
#相当于
GET zhifou/doc/_search 也是查询全部
首先创建一些示例:
PUT t1/doc/1
{
"title": "中国是世界上人口最多的国家"
}
PUT t1/doc/2
{
"title": "美国是世界上军事实力最强大的国家"
}
PUT t1/doc/3
{
"title": "北京是中国的首都"
}
需求1: 查询关于中国的字段(只希望返回中国相关的文档)
1.按照match查询 会出现三个结果 因为ES在内部对文档做分词的时候,对中文是一个字一个字分的,所以搜中国,就是中 和 国 都符合条件
2.如果要中文分词需要下中文分词插件,现在的解决办法就是 采用 短语查询 match_phrase
GET t1/doc/_search
{
"query": {
"match_phrase": {
"title": {
"query": "中国"
}
}
}
}
需求2: 搜索类似于正则的 中国.*?世界 的文档
用slop 参数 表示 中国 世界 这两个词组之间 隔了2个词
GET t1/doc/_search
{
"query": {
"match_phrase": {
"title": {
"query": "中国世界",
"slop": 2
}
}
}
}
准备数据:
PUT t3/doc/1
{
"title": "maggie",
"desc": "beautiful girl you are beautiful so"
}
PUT t3/doc/2
{
"title": "sun and beach",
"desc": "I like basking on the beach"
}
需求: 要查询desc 中 有 bea 的文档
GET t3/doc/_search
{
"query": {
"match_phrase_prefix": {
"desc": "bea"
}
}
}
注意: 有时会和max_expanions搭配使用
准备数据:
PUT t3/doc/1
{
"title": "maggie is beautiful girl",
"desc": "beautiful girl you are beautiful so"
}
PUT t3/doc/2
{
"title": "beautiful beach",
"desc": "I like basking on the beach,and you? beautiful girl"
}
需求:我们要查询 多个字段中含有同一个关键字的文档
GET t3/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "beautiful"
}
},
{
"match": {
"desc": "beautiful"
}
}
]
}
}
}
如果字段很多的情况下 我们需要写非常多的 match
因此 我们用到了 multi_match 与上述查询结果一致
GET t3/doc/_search
{
"query": {
"multi_match": {
"query": "beautiful",
"fields": ["title", "desc"]
}
}
}
除此之外,multi_match 甚至可以当作 match_phrase 和 match_phrase_prefix 使用,只需要指定type类型即可.
GET t3/doc/_search
{
"query": {
"multi_match": {
"query": "gi",
"fields": ["title"],
"type": "phrase_prefix"
}
}
}
GET t3/doc/_search
{
"query": {
"multi_match": {
"query": "girl",
"fields": ["title"],
"type": "phrase"
}
}
}
1.match:返回所有匹配的分词
2. match_all: 查询全部
3.match_phrase: 短语查询,在match的基础上进一步查询词组,可以指定slop分词间隔
4.match_phrase_prefix:前缀查询,根据短语中最后一个词组做前缀匹配,可以用于搜索提示,但注意和max_expanions 搭配。 其实默认是50.
5.multi_match:多字段查询,使用相当灵活,可以完成match_phrase 和 match_phrase_prefix的工作
默认情况下, ES 在对文档分析期间(将文档分词后保存到倒排索引中),会对文档进行分词,比如默认的标准分析器会对文档进行:
1.删除大多数标点符号
2.将文档分解为带个词条,我们称为token
3.将token 转为 小写
term 查询区分大小写 不会将 搜索字段值 转成小写
因此, 不要使用 term 对类型是text的字段进行查询
如果想要查询多个精准值 使用terms
GET w10/doc/_search
{
"query": {
"terms": {
"t1": ["beautiful", "sexy"]
}
}
}
原文:https://www.cnblogs.com/zhukaijian/p/12879658.html