目录

ElasticSearch 实现分词全文检索 - 概述

ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装

ElasticSearch 实现分词全文检索 - Restful基本操作

ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作

ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作

ElasticSearch 实现分词全文检索 - 测试数据准备

ElasticSearch 实现分词全文检索 - term、terms查询

ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询

ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询

ElasticSearch 实现分词全文检索 - Scroll 深分页

ElasticSearch 实现分词全文检索 - delete-by-query

ElasticSearch 实现分词全文检索 - 复合查询

ElasticSearch 实现分词全文检索 - filter查询

ElasticSearch 实现分词全文检索 - 高亮查询

ElasticSearch 实现分词全文检索 - 聚合查询 cardinality

ElasticSearch 实现分词全文检索 - 经纬度查询

ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码

数据准备

ElasticSearch 实现分词全文检索 - 测试数据准备

bool查询

复合过滤器,将多个查询条件,以一定的逻辑组合在一起

  • must:所有的条件,用 must 组合在一起,标识 and 的意思
  • must_not: 将 must_not 中的条件,全部都不能匹配,标识 not 的意思
  • should: 所有的条件,用should组合在一起,表示 or 的意思
# 查询省份为江苏或上海
# operatorld 不是联通 !=2
# smsContent 中包括 开心 和 钞票
# bool 查询
POST /sms-logs-index/_search
{
"query": {
"bool": {
"should": [
{"term": {
"province": {
"value": "江苏"
}
}},
{"term": {
"province": {
"value": "上海"
}
}}
],
"must_not": [
{
"term": {
"operatorld": {
"value": "2"
}
}
}
],
"must": [
{
"match": {
"smsContent": "开心"
}
},
{
"match": {
"smsContent": "钞票"
}
}
]
}
}
}

JAVA

@Test
void boolQuery() throws Exception {
String indexName = "sms-logs-index";
RestHighLevelClient client = ESClient.getClient(); //1. 创建SearchRequest对象
SearchRequest request = new SearchRequest(indexName); //2. 指定查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.should(QueryBuilders.termQuery("province","江苏"));
boolQuery.should(QueryBuilders.termQuery("province","上海"));
boolQuery.mustNot(QueryBuilders.termQuery("operatorld","2"));
boolQuery.must(QueryBuilders.matchQuery("smsContent","开心"));
boolQuery.must(QueryBuilders.matchQuery("smsContent","钞票")); builder.query(boolQuery);
request.source(builder); //3. 执行查询
SearchResponse resp = client.search(request, RequestOptions.DEFAULT); //4. 输出返回值
for (SearchHit hit : resp.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}

boosting 查询

boosting 查询可以帮助我们去影响查询后的 score

  • positive:只有匹配上positive的查询的内容,才会被放到返回的结果中
  • negative:如果匹配上和positive并且也匹配上了negative,就可以降低这样的文档 score.
  • negative_boost:指定系数,必须小于 1.0

    关于查询时,分数是如何计算的:
  • 搜索的关键字在文档中出现的频次越高,分数就越高
  • 指定的文档内容越短,分数就越高
  • 我们在搜索时,指定的关键字也会被分词,这个被分词的内容,被分词库匹配的个数越多,分数越高
POST /sms-logs-index/_search
{
"query": {
"boosting": {
"positive": {
"match": {
"smsContent": "人"
}
},
"negative": {
"match": {
"smsContent": "网络" # 如果查出来的包括 网络
}
},
"negative_boost": 0.5 #将分数乘以系数 0.5 ,分数越高,排名越靠前
}
}
}

Java

@Test
void boostringQuery() throws Exception {
String indexName = "sms-logs-index";
RestHighLevelClient client = ESClient.getClient(); //1. 创建SearchRequest对象
SearchRequest request = new SearchRequest(indexName); //2. 指定查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
BoostingQueryBuilder boostingQuery = QueryBuilders.boostingQuery(
QueryBuilders.matchQuery("smsContent", "人"),
QueryBuilders.matchQuery("smsContent", "网络")
).negativeBoost(0.5f); builder.query(boostingQuery);
request.source(builder); //3. 执行查询
SearchResponse resp = client.search(request, RequestOptions.DEFAULT); //4. 输出返回值
for (SearchHit hit : resp.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}

ElasticSearch 实现分词全文检索 - 复合查询的更多相关文章

  1. Elasticsearch(7) --- 复合查询

    Elasticsearch(7) ---复合查询 复合查询有:bool query(布尔查询).boosting query(提高查询).constant_score(固定分数查询).dis_max( ...

  2. Elasticsearch实现复合查询,高亮结果等技巧

    一.Es的配置 实现es的全文检索功能的第一步,首先从与es进行连接开始,这里我使用的是es的5.x java api语法. public TransportClient esClient() thr ...

  3. ElasticSearch学习问题记录——nested查询不到数据

    通过代码创建了索引名称为demoindex,索引类型为school,以下是索引类型的数据映射结构: { "state": "open", "setti ...

  4. 第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

    第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询 bool查询说明 filter:[],字段的过滤,不参与打分must:[] ...

  5. Elasticsearch结构化搜索与查询

    Elasticsearch 的功能之一就是搜索,搜索主要分为两种类型,结构化搜索和全文搜索.结构化搜索是指有关查询那些具有内在结构数据的过程.比如日期.时间和数字都是结构化的:它们有精确的格式,我们可 ...

  6. 014-elasticsearch5.4.3【五】-搜索API【三】复合查询boolQuery、constantScoreQuery、disMaxQuery

    一.概述 复合查询包装其他复合或叶子查询,以组合其结果和分数,更改其行为,或从查询切换到筛选器上下文. 1.1.constantScoreQuery 包含另一个查询但在过滤器上下文中执行的查询.所有匹 ...

  7. elasticsearch kibana + 分词器安装详细步骤

    elasticsearch kibana + 分词器安装详细步骤 一.准备环境 系统:Centos7 JDK安装包:jdk-8u191-linux-x64.tar.gz ES安装包:elasticse ...

  8. PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))

    PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a)   robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...

  9. ElasticSearch中文分词(IK)

    ElasticSearch常用的很受欢迎的是IK,这里稍微介绍下安装过程及测试过程.   1.ElasticSearch官方分词 自带的中文分词器很弱,可以体检下: [zsz@VS-zsz ~]$ c ...

  10. Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

    HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...

随机推荐

  1. CSS3-3D导航(transform:rotate)

    借助transform:rotate实现上图的3D导航效果 具体代码如下 1 <div class="nav"> 2 <ul> 3 <li> 4 ...

  2. Redis基础命令和持久化

    Redis命令工具 Redis-server :用于启动Redis的工具 Redis-benchmark:用于检查Redis在本机的运行效率 Redis-check-aof:修复aof持久化文件 Re ...

  3. 如何使用C++代码实现1-100之间的素数

    #include "pch.h" #include <iostream> using namespace std; int main() { cout << ...

  4. libevent学习之入门--[01]概述与安装

    网上关于libevent的介绍不在少数,我相信目前看到我这篇博客时已经基本了解libevent是用来做什么的,有什么功能,在此就不重复介绍了.我会按照我学习的过程来完整记录整个库的所有核心内容和具体应 ...

  5. 训练题——DS18B20部分

    Author:Cherry_Ywj 0. 前言 本文档以 DS18B20 为例,主要介绍如何针对一种传感器编写相应的驱动库,驱动是单片机开发中难度较大的一环.从看别人代码并对照 datasheet 开 ...

  6. 百度地图api高亮显示指定区域,其余遮罩

    先放一张最后的效果图 主要功能:只显示天府新区(双流区+龙泉驿区)这一块,其他的地方就用半透明的遮罩层盖住,然后用Markers标注出每个项目的所在地点,当鼠标悬浮在标注点的时候就显示出项目名称. h ...

  7. 前端element ui 文件base64加密字符串 上传

    <el-form-item label="附件" prop="attachment"> <el-upload :multiple=" ...

  8. javaweb链接到数据库(mysql)操作

    准备:配置好数据库,下好mysql connect 第一步:将my connec文件和commons-dbutil(,jar)复制到webapp文件下WEB-INF的lib文件中,然后右键构建路径. ...

  9. SpringBoot加载相关注解

    springBoot加载 @Configuration 表明该类是一个配置类常常配合@Bean使用,让容器管理对象 @Configuration(proxyBeanMethods = true) pr ...

  10. 【闫式dp分析法】