博客
关于我
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/

你可能感兴趣的文章
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从Oracle11G同步数据到Mysql_亲测可用_解决数据重复_数据跟源表不一致的问题---大数据之Nifi工作笔记0065
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>