目录
结构化数据
-
结构化搜索,是指对结构化数据的搜索
-
日期,布尔类型和数字都是结构化的
-
-
文本也可以是结构化的
-
如彩色表可以有离散的颜色集合:红,绿,蓝
-
一个博客可能贴了标签,例如:分布式和搜索
-
电商网站上的商品都有UPCs(通过产品码)或其他的唯一标识,他们都需要遵守颜色的,结构化的格式
-
ES中的结构化搜索
-
布尔,时间,日期和数字这类结构化的数据:有精确的格式,我们可以对这些格式进行逻辑操作.包括比较数字或者时间的范围,或判断两个值的大小
-
结构化的文本可以做精确匹配或者部分匹配
-
Term查询/Prefix前缀查询
-
-
结构化的结果只有是和否两个值
-
根据场景需要,可以决定结构化搜索是否需要打分(转成filter)
-
Demo
//结构化搜索,精确匹配
POST /products/_bulk
{"index":{"_id":1}}
{"price":10,"avaliable":true,"productID":"XHDK-A-1293-#fJ3","data":"2018-01-01"}
{"index":{"_id":2}}
{"price":20,"avaliable":true,"productID":"QWER-A-1293-#fJ3","data":"2019-01-01"}
{"index":{"_id":3}}
{"price":20,"avaliable":false,"productID":"ASDF-A-1293-#fJ3"}
- boolean
- constant_score:filtering
- range
- 日期Range(用法同Range)
- Exists
//Exists:存在某一个字段的文档会被匹配上
POST products/_search
{
"query": {
"constant_score": {
"filter": {
"exists": {
"field": "data"
}
}
}
}
}
- 处理多值字段
- 处理多值字段,term查询是包含,而不是等于
- 精确匹配的解决方案:增加一个genre_count字段进行计数,会在组合bool query给出解决方案
POST /movies/_bulk
{"index":{"_id":1}}
{"title":"Father of the Bridge Part II","year":1995,"genre":"Comedy"}
{"index":{"_id":2}}
{"title":"Dava","year":1993,"genre":["Comedy","Romance"]}
本节知识点回顾
-
结构化数据 && 结构化搜索
-
如果不需要算分,可以通过Constant Score,将查询转为Filtering
-
-
范围查询和Date Math
-
使用Exist查询处理非空null值
-
精确值&&多值字段的精确值查找
-
Term查询是包含,不是完全相等.针对多值字段查询要尤其注意
-