当前位置: 首页 > news >正文

023 elasticsearch查询数据 高亮 分页 中文分词器 field的数据类型

文章目录

    • 1查询的语法
    • 2查询全部数据
    • 3termQuery 关键词查询
    • 4QueryString查询,根据查询字符串查询
    • 5match查询,功能和query_string相同
    • 6multi_match查询
    • 7bool查询
    • 8高亮处理
    • 9查询结果分页
    • 10中文分词器
    • field的数据类型

1查询的语法

方法:post
url:http://localhost:9200/[/{blog}][/{type}]/_search
请求体:
json形式的查询语句

{"query":{"xxx"}
}

2查询全部数据

{"query":{"match_all":{}}
}

3termQuery 关键词查询

是所有查询中最基本的一个查询
根据关键词进行查询,如果关键词在索引中存在就有结果
如果关键词不存在就查询不到结果。ES不会再次对查询的内容进行分词处理
需要指定:

  1. 要查询的关键词
  2. 要查询的字段
{"query":{"term":{"title":"java"}}
}

默认使用的是standard分词器。处理英文根据空格进行分词处理。如果处理中文,是一个汉字一个关键词。

4QueryString查询,根据查询字符串查询

查询条件可以指定一个字符串,在查询之前,可以对查询条件进行分词处理,然后基于分词之后的结果再次查询

{"query":{"query_string":{"default_field":"title","query":"第二轮开售|摩拳擦掌,笑迎五一"}}
}

5match查询,功能和query_string相同

{"query":{"match":{"title":"第二轮开售|摩拳擦掌,笑迎五一"}}
}

6multi_match查询

可以指定在多个字段中查询

{"query":{"multi_match":{"query":"第二轮开售|摩拳擦掌,笑迎五一","fields":["title","content"]}}
}

7bool查询

  1. 组合条件查询
    逻辑关系:
    must:必须满足,相当于是AND
    should:应该满足,相当于OR
    must_not:必须不能满足,相当于NOT
    语法:
{"query":{"bool":{"must":[],"should":[],"must_not":[],"filter":[]}}
}

案例:

{"query":{"bool":{"must":[{"match":{"title":"apple"}},{"match":{"content":"apple"}}]}}
}
  1. filter过滤查询
    在bool查询的filter节点中可以包含多个查询条件,条件之间层层过滤
    也可以直接使用filter进行数据的查询。filter查询是不进行打分处理。查询性能高于query

     	相关度排序:SEO:搜索引擎优化。两个指标:TF:关键词在文章中出现的频率。TF越大相关度越高。DF:所有文档中关键词出现的频率。DF越大相关度越低。例如 and根据TF和DF计算出一个相关度的得分,得分越高相关度越高,文档根据相关度得分进行降序排列。
    
{"query":{"bool":{"filter":[{"match_all":{}},{"term":{"title":"喜"}},{"term":{"title":"金"}},{"term":{"title":"北"}}								]}}
}

8高亮处理

在查询结果中将查询的关键词左右两边分别加上成对的html标签。
高亮的处理在查询条件中指定。
{"query":{"bool":{"must":[{"match":{"title":"apple"}}]}},"highlight":{"fields":{"title":{}},"pre_tags":"<em>","post_tags":"</em>"}
}

9查询结果分页

在query查询条件中增加两个属性
from:起始的行号,从0开始
size:每页显示的记录数量

{"query":{"multi_match":{"query":"苹果正开发","fields":["title","content"]}},"highlight": {"fields": {"title": {},"content": {}},"pre_tags": "<em>","post_tags": "</em>"},"from": 10,"size": 5
}

10中文分词器

Ik-analyzer
https://github.com/medcl/elasticsearch-analysis-ik/releases

mkdir ik-analyzer
sudo yum install unzip
unzip elasticsearch-analysis-ik-7.10.2.zip -d ik-analyzer
cp ik-analyzer/ elasticsearch-7.10.2/plugins/ -R
方法:POST
url:http://localhost:9200/_analyze
方法体:{"analyzer":"standard","text":"and productivity has made it the world's most popular Java framework."}IK一旦安装之后有两个分词算法:ik_smart:快速分词,速度快,粒度比较粗。ik_max_word:最大数量分词,速度慢,粒度细。
索引一旦创建完毕不能修改分词器的如果使用中文分词,应该在创建索引时,设置mapping的过程中指定使用中文分词器。
PUT /blog1
{"mappings":{"properties":{"id":{"type":"long"},"title":{"type":"text","analyzer":"ik_max_word","store":"true"},"mobile":{"type":"keyword","store":"true"},"comment":{"type":"text","analyzer":"ik_max_word","store":"true"},"content":{"type":"text","analyzer":"ik_max_word","store":"true"}			}}
}
POST /blog1/_bulk

field的数据类型

数值类型:intlongfloatdouble
字符串:text:需要分词的字段必须使用text,只有text类型才能支持分词器。keyword:不需要对字段的内容进行分词处理时,可以使用keyword数据类型。例如:身份证号、手机号、订单号等。
日期:data字段的三个属性:是否分词:是否是text类型。例如文章的title、content都需要分词。是否索引:是否对field的内容进行索引。如果text数据类型一定需要创建索引,分词之后一定要创建索引。不分词也可以把field的内容添加到索引中,使用keyword数据类型。也可以不索引field中的内容。例如文件的path,不需要分词,不需要索引,只需要存储即可。"path":{"type":"keyword","index":false,"store":true}是否存储定义field时,store属性是否是true。如果是true那么就存储,false不存储。无论是否存储,不影响分词、创建索引、搜索。影响的范围就是是否能在查询结果中看到原始内容。

http://www.mrgr.cn/news/50287.html

相关文章:

  • 多模态大模型 + 数字人 实现半自动 演示文稿 PPT讲解 搭建赛博老师傅 助力程序员赛博飞升!!!
  • Java | Leetcode Java题解之第479题最大回文数乘积
  • SpringCloud学习记录|day5
  • torch.jit.script编译加速推理的尝试
  • 读书笔记《PPT演讲力》大树模型
  • 如何优化 Nginx 配置
  • 用Java写一个学生类
  • RA6M5——GPIO
  • React前端框架的描述和使用方法
  • Java开发中知识点整理
  • P1439 【模板】最长公共子序列 Python 题解
  • Redis如何批量删除指定前缀的key
  • 单点登录Apereo CAS 7.1客户端登出配置及免认证页面问题
  • 安装和配置Canal
  • Linux rm命令详解
  • 面对服务器掉包的时刻困扰,如何更好的解决
  • Oracle数据库安装Windows版本
  • C++ 内存分布情况
  • 空间智能技术赋能CIM平台,为数字住建插上翅膀
  • Exporter for Unreal to Unity 2024(Unreal到Unity的导出器)