博客
关于我
ES DSL搜索 - multi_match、boost和布尔查询
阅读量:286 次
发布时间:2019-03-01

本文共 7131 字,大约阅读时间需要 23 分钟。

1 介绍

主要介绍索引请求的基础API操作,使用postman进行请求,接口请求的前缀地址统一为elasticsearch 部署IP地址+端口号(例如 http://192.168.51.4:9200 。

统一请求地址:

POST /search_demo/_doc/_search

2 multi_match

multi_match 满足使用 match 在多个字段中进行查询的需求

传递JSON数据

{       "query": {           "multi_match": {               "query": "组合",            "fields": [                "desc","nickname"            ]        }    },        "_source": [            "id",            "nickname",            "desc"        ]}

请求结果

{       "took": 3,    "timed_out": false,    "_shards": {           "total": 1,        "successful": 1,        "skipped": 0,        "failed": 0    },    "hits": {           "total": {               "value": 1,            "relation": "eq"        },        "max_score": 2.2874916,        "hits": [            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1007",                "_score": 2.2874916,                "_source": {                       "nickname": "老男孩",                    "id": 1007,                    "desc": "确实是个很好的组合,筷子 筷子"                }            }        ]    }}

3 boost

boost 权重,为某个字段设置权重,权重越高,文档相关性得分就越高。通常来说,搜索商品名称要比商品简介的权重要高。

传递JSON数据

{       "query": {           "multi_match": {               "query": "好的",            "fields": [                "desc","nickname*10"            ]        }    },        "_source": [            "id",            "nickname",            "desc"        ]}

请求结果

{       "took": 4,    "timed_out": false,    "_shards": {           "total": 1,        "successful": 1,        "skipped": 0,        "failed": 0    },    "hits": {           "total": {               "value": 9,            "relation": "eq"        },        "max_score": 3.1980762,        "hits": [            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1004",                "_score": 3.1980762,                "_source": {                       "nickname": "红帽子",                    "id": 1004,                    "desc": "好的系统必须拥有稳定的系统结构"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1005",                "_score": 3.0979095,                "_source": {                       "nickname": "switch游戏机",                    "id": 1005,                    "desc": "好的游戏,才会有人购买,比如塞尔达"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1003",                "_score": 0.37556386,                "_source": {                       "nickname": "涡轮增压",                    "id": 1003,                    "desc": "极限的速度是需要涡轮增压的"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1012",                "_score": 0.36424035,                "_source": {                       "nickname": "youzi",                    "id": 1012,                    "desc": "永远的神"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1002",                "_score": 0.35254776,                "_source": {                       "nickname": "进击的巨人",                    "id": 1002,                    "desc": "艾伦是会变成真正的巨人的"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1011",                "_score": 0.27665582,                "_source": {                       "nickname": "皮特",                    "id": 1011,                    "desc": "皮特的姓氏好像是彼得"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1007",                "_score": 0.2639615,                "_source": {                       "nickname": "老男孩",                    "id": 1007,                    "desc": "确实是个很好的组合,筷子 筷子"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1009",                "_score": 0.252381,                "_source": {                       "nickname": "露西",                    "id": 1009,                    "desc": "露西是一只很聪明的cat"                }            },            {                   "_index": "search_demo",                "_type": "_doc",                "_id": "1001",                "_score": 0.18093815,                "_source": {                       "nickname": "飞翔的荷兰号",                    "id": 1001,                    "desc": "我在p2pi网站解决项目中遇到的问题,学习到了很多知识"                }            }        ]    }}

nickname^10 代表搜索提升10倍的相关性,也就是说用户搜索的时候,其实以这个nickname为主,desc为辅,nickname的匹配相关度高只要提升权重比例就可以。

4 布尔查询

可以实现多重组合查询

  • must:查询必须匹配搜索条件,譬如 and
  • should:查询匹配满足一个条件,譬如 or
  • must_not:不匹配搜索条件,一个都不满足,譬如 not in

单个查询

{       "query": {           "bool": {               "must": [                {                       "multi_match": {                           "query": "好的",                        "fields": ["desc","nickname"]                    }                },                {                       "term": {                           "sex": 0                    }                },                {                       "term": {                           "birthday": "1992-12-24"                    }                }                        ]        }    },        "_source": [            "id",            "sex",            "nickname",            "desc"        ]}

组合查询

{       "query": {           "bool": {               "must": [                {                       "match": {                           "desc": "好的"                    }                },                {                       "match": {                           "nickname": "好的"                    }                }            ],            "should": [                {                       "match": {                           "sex": 1                    }                }            ],            "must_not":[                {                       "term": {                           "birthday": "1993-01-24"                    }                }            ]                    }    },        "_source": [            "id",            "sex",            "nickname",            "desc",            "birthday"        ]}

为指定词语加权

{       "query": {           "bool": {               "should": [                {                       "match": {                           "desc": {                               "query": "好的",                            "boost": 2                        }                    }                },                {                       "match": {                           "desc": {                               "query": "男孩",                             "boost": 20                        }                    }                }            ]                    }    },        "_source": [            "id",            "sex",            "nickname",            "desc",            "birthday"        ]}

5 相关信息

  • 博文不易,辛苦各位猿友点个关注和赞,感谢

转载地址:http://sjhx.baihongyu.com/

你可能感兴趣的文章
NetBeans IDE8.0需要JDK1.7及以上版本
查看>>
netbeans生成的maven工程没有web.xml文件 如何新建
查看>>
netcat的端口转发功能的实现
查看>>
netfilter应用场景
查看>>
netlink2.6.32内核实现源码
查看>>
NetMizer-日志管理系统 dologin.php SQL注入漏洞复现(XVE-2024-37672)
查看>>
Netpas:不一样的SD-WAN+ 保障网络通讯品质
查看>>
NetScaler的常用配置
查看>>
netsh advfirewall
查看>>
NETSH WINSOCK RESET这条命令的含义和作用?
查看>>
netstat命令用法详解
查看>>
Netstat端口占用情况
查看>>
Netty 4的内存管理:sun.misc.Unsafe
查看>>
Netty WebSocket客户端
查看>>
netty 主要组件+黏包半包+rpc框架+源码透析
查看>>
Netty 异步任务调度与异步线程池
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
Netty入门使用
查看>>