Elasticsearch 结构化搜索
时间:2019-12-11
本文章向大家介绍Elasticsearch 结构化搜索,主要包括Elasticsearch 结构化搜索使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1,精确值查找
1.1 term
查询
- 用于查询
数字(numbers)
,布尔值(Booleans)
,日期(dates)
,文本(text)
// 1, 自定义字段映射
PUT /my_store
{
"mappings": {
"products": {
"properties":{
"productID": {
"type":"keyword"
}
}
}
}
}
// 2,初始化数据
POST /my_store/products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10, "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20, "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30, "productID" : "QQPX-R-3956-#aD8" }
// 2,以非评分模式(constant_score)执行 term 查询
GET /my_store/products/_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"price": 20
}
}
}
}
}
// SQL 形式表达
SELECT document
FROM products
WHERE price = 20
// 3, 查询 productID
// 备注:如果不设置“自定义字段映射”,“productID”会被拆分成多个token,
// analyze 分析索引
GET /my_store/_analyze
{
"field":"productID",
"text":"XHDK-A-1293-#fJ3"
}
2, 组合过滤器(compound filter)
// 形式:
{
"bool":{
"must":[], // 与AND等价
"should":[], // 与NOT等价
"must_not":[] // 与OR等价
}
}
// SQL 表达形式
SELECT product
FROM products
WHERE (price = 20 OR productID = "XHDK-A-1293-#fJ3")
AND (price != 30)
// 组合过滤器
GET /my_store/products/_search
{
"query":{
"bool":{
"should":[
{"term":{"price":20}},
{"term":{"productID":"XHDK-A-1293-#fJ3"}}
],
"must_not":{
"term":{"price":30}
}
}
}
}
// 嵌套布尔过滤器
SELECT document
FROM products
WHERE productID = "KDKE-B-9947-#kL5"
OR ( productID = "JODL-X-1937-#pV7"
AND price = 30 )
GET /my_store/products/_search
{
"query":{
"bool":{
"should":[
{"term":{"productID":"KDKE-B-9947-#kL5"}},
{
"bool":{
"must":[
{"term":{"productID":"JODL-X-1937-#pV7"}},
{"term":{"price":30}}]
}
}
]
}
}
}
3, 查找多个精确值
// 查找价格字段值为 $20 或 $30
GET /my_store/products/_search
{
"query":{
"constant_score": {
"filter": {
"terms":{
"price":[20,30]
}}
}
}
}
3.1 范围
// 查询价格大于$20且小于$40美元的产品
GET /my_store/products/_search
{
"query":{
"constant_score": {
"filter": {
"range":{
"price":{
"gte":20,
"lt":40
}
}}
}
}
}
4. 处理NULL值
// 初始化数据
POST /my_index/posts/_bulk
{ "index": { "_id": "1" }}
{ "tags" : ["search"] }
{ "index": { "_id": "2" }}
{ "tags" : ["search", "open_source"] }
{ "index": { "_id": "3" }}
{ "other_field" : "some data" }
{ "index": { "_id": "4" }}
{ "tags" : null }
{ "index": { "_id": "5" }}
{ "tags" : ["search", null] }
4.1 存在查询(exists)
// SQL 形式
SELECT tags
FROM posts
WHERE tags IS NOT NULL
// exists 查询
GET /my_index/posts/_search
{
"query": {
"constant_score": {
"filter": {
"exists": {"field": "tags"}
}
}
}
}
4.2 缺失查询(missing)
// SQL 形式
SELECT tags
FROM posts
WHERE tags IS NULL
// missing 查询
GET /my_index/posts/_search
{
"query": {
"bool":{
"must_not":{
"exists":{
"field":"tags"
}
}
}
}
}
参考资料:
-自定义字段映射
-no"query" registered for "filtered"
-no"query" registered for "missing"
-Exists Query文档
原文地址:https://www.cnblogs.com/linkworld/p/12024518.html
- Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
- Kosaraju算法、Tarjan算法分析及证明--强连通分量的线性算法
- 关于curl网站运维与开发的那些事
- 并查集Union-find及其在最小生成树中的应用
- go 语言的库文件放在哪里?如何通过nginx代理后还能正确获取远程地址
- 离线Tarjan算法-最近公共祖先问题
- Java文件上传下载实训
- 【网络编程系列】二:socket通信原理及实践
- textrank算法原理与提取关键词、自动提取摘要PYTHON
- 【网络编程系列】一:字节顺序的大端与小端表示法
- Linux下的make命令用法
- 增量数据丢失的原因分析(三)(r8笔记第91天)
- JS之浏览器对象BOM
- 超清晰的makefile解释、编写与示例
- 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 数组属性和方法
- MySQL 基本使用(上):DDL 和 DML 语句
- MySQL 基本使用(下):DCL 语句和聚合函数
- 玩转 PhpStorm 系列(二):导航篇
- 带你写出符合Promise/A+规范Promise的源码
- 「R」R Docker 教程
- 「Workshop」第十期:聚类
- 使用 Vue 3.0,你可能不再需要Vuex了
- 14个 JavaScript 代码优化技巧
- 【Java】基础10:流程控制语句
- 【Java】基础06:编写入门程序
- 【Java】基础03:常用的DOS命令
- 面试进阶-数据库中需要理解的锁
- 剑指offer第9题:旋转数组的最小数字
- Mysql的SQL性能优化指北
- H3C 配置管理实验