elasticsearch02
Elasticsearch搜索引擎02 Elasticsearch是一个功能强大且灵活的搜索引擎,它不仅可以实现数据存储,还可以提供强大的搜索和数据分析功能。在本文中,我们将深入探讨Elasticsearch的搜索功能,并学习如何使用DSL和RestClient来实现搜索。 1.DSL查询文档 Elasticsearch提供了基于JSON风格的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:查询所有、全文检索查询、精准查询、地理查询、复合查询等。 1.1.DSL查询分类 * 查询所有:查询出所有数据,一般测试用。例如:match_all * 全文检索查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match_query、multi_match_query * 精准查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:ids、range、term * 地理查询:根据经纬度查询。例如:geo_distance、geo_bounding_box * 复合查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:bool、function_score 1.2.全文检索查询 全文检索查询是Elasticsearch最常用的查询类型之一。它可以根据用户输入的内容,进行分词、倒排索引匹配、文档id匹配等步骤,最后返回搜索结果。 1.2.1.使用场景 全文检索查询的基本流程如下: * 对用户搜索的内容做分词,得到词条 * 根据词条去倒排索引库中匹配,得到文档id * 根据文档id找到文档,返回给用户 常用的场景包括: * 商城的输入框搜索 * 百度输入框搜索 * 京东搜索等 1.2.2.基本语法 常见的全文检索查询包括: * match查询:单字段查询 * multi_match查询:多字段查询,任意一个字段符合条件就算符合查询条件 match查询语法如下: GET /indexName/_search{ "query": { "match": { "FIELD": "TEXT" } } } multi_match查询语法如下: GET /indexName/_search{ "query": { "multi_match": { "query": "TEXT", "fields": ["FIELD1", "FIELD12"] } } } 1.2.3.示例 match查询示例: GET /indexName/_search{ "query": { "match": { "FIELD": "TEXT" } } } multi_match查询示例: GET /indexName/_search{ "query": { "multi_match": { "query": "TEXT", "fields": ["FIELD1", "FIELD12"] } } } 可以看到,两种查询结果是一样的,为什么?因为我们将brand、name、business值都利用copy_to复制到了all字段中。因此你根据三个字段搜索,和根据all字段搜索效果当然一样了。但是,搜索字段越多,对查询性能影响越大,因此建议采用copy_to,然后单字段查询的方式。 1.2.4.总结 match和multi_match的区别是什么? * match:根据一个字段查询 * multi_match:根据多个字段查询,参与查询字段越多,查询性能越差 1.3.精准查询 精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。 常见的有: * term:根据词条精确值查询 * range:根据值的范围查询 1.3.1.term查询 因为精确查询的字段搜是不分词的字段,因此查询的条件也必须是不分词的词条。查询时,用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多,反而搜索不到数据。 语法说明: 示例: // term查询 GET /indexName/_search{ "query": { "term": { "FIELD": { "value": "VALUE" } } } } 1.3.2.range查询 范围查询,一般应用在对数值类型做范围过滤的时候。比如做价格范围过滤。 基本语法: 示例: // range查询 GET /indexName/_search{ "query": { "range": { "FIELD": { "gte": "MIN_VALUE", "lte": "MAX_VALUE" } } } } 通过学习Elasticsearch的搜索功能,我们可以更好地理解Elasticsearch的强大功能,并更好地应用于实际项目中。
剩余55页未读,继续阅读
- 粉丝: 1
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- matlab画图教程.docx
- 基于MNIST数据集卷积神经网络实现手写数字识别(GUI).zip
- 一个MATLAB仿真设计的例子,演示如何对一个模拟信号进行傅里叶变换:
- 10-Hadoop(HA)V4.0.docx
- 基于MNIST数据集卷积神经网络实现手写数字识别(GUI)源码+文档说明
- 自定义函数在后缀表达式中的应用与实现
- 使用python爬取天气信息(包括历史天气数据)_python爬取天气数据-CSDN博客.html
- 毕设项目:高校学生宿舍管理系统的设计与实现(ASP.NET+源代码+论文)
- Navicat入门教程.docx
- os.path.join(root, 'test-average-edge-map'