实战 | Elasticsearch实现类Google高级检索
时间:2022-05-04
本文章向大家介绍实战 | Elasticsearch实现类Google高级检索,主要内容包括一、高级检索的功能点、二、高级检索拆分、2、包含以下的完整关键词 :、3、包含以下任意一个关键词 :、4、不包括以下关键词 :、5、限定要搜索的网页的时间是:、6、关键词位置:、三、DSL高级检索实现、四、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
一、高级检索的功能点
通过高级搜索配置搜索项,能更准确的过滤掉不相干信息,获取最想要的检索信息。 以Google搜索为例(截取核心片段):
二、高级检索拆分
1、包含以下全部的关键词:
需要分词处理; 若需要指定字段,则使用matchQuery实现; 若无需指定字段的全文检索,则使用queryStringQuery实现;
2、包含以下的完整关键词 :
需要完整匹配字符,使用wildcardQuery结合”*”实现;
3、包含以下任意一个关键词 :
空格分隔每个关键词,需要将多个词空格拆分,然后对每个关键词通过should结合wildcardQuery遍历实现;
4、不包括以下关键词 :
包含以下全部关键词的反面, 若需要指定字段,则使用must_not结合matchQuery实现; 若无需指定字段,则使用must_not结合queryStringQuery实现;
5、限定要搜索的网页的时间是:
限定搜索的开始和结束时间,通过rangeQuery实现。
6、关键词位置:
根据关键词位置的不同,采用不同的实现; 关键词位于title字段:指定title进行检索; 关键词位于content字段:指定content进行检索; 关键词位于全部字段:不指定字段进行检索,多使用 queryStringQuery实现。
三、DSL高级检索实现
POST detail_index/_search
{
"from" : 0,
"size" : 10,
"query" : {
"bool" : {
"must" : [
{
"match" : {
"title" : {
"query" : "苹果乔布斯",
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"boost" : 1.0
}
}
},
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*苹果总裁库克*",
"boost" : 1.0
}
}
},
{
"range" : {
"create_time" : {
"from" : "2017-09-07 00:00:00",
"to" : "2017-09-15 23:59:59",
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
}
],
"must_not" : [
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*苹果梨*",
"boost" : 1.0
}
}
}
],
"should" : [
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*苹果手机*",
"boost" : 1.0
}
}
},
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*iphoneX*",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"_source" : {
"includes" : [
"title",
"content"
],
"excludes" : [ ]
},
"highlight" : {
"pre_tags" : [
"<span style="color:red">"
],
"post_tags" : [
"</span>"
],
"fragment_size" : 100,
"number_of_fragments" : 5,
"require_field_match" : true,
"fields" : {
"title" : { }
}
}
}
四、小结
Elasticsearch检索中的精确匹配、全文检索分为很多种,需要结合开发需求进行因地制宜的使用。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JetBrains注册码计算(IntelliJ IDEA 15.0注册码激活)
- Java文本框内文字显示不同颜色、字号等属性【函数调用一键实现】
- PLSQL-sql操作&判断循环
- Python 技术篇-用PIL库实现彩色图片转化为黑白图片
- PLSQL-游标
- 超详细的Java容器、面板及四大布局管理器应用讲解!
- Go各时间字符串的解析
- MongoDB数据分页与排序
- Python 技术篇-用PIL库实现图片剪切、图片粘贴
- maven初步入门
- 超详细的Java弹窗样式及使用教程【JOptionPane类详细使用教程】
- Python 技术篇-用PIL库旋转图片的两种方式,改变图像尺寸
- html+css+JavaScript例题
- 加速Github的访问及下载速度
- HDFS简介