结构化数据
bool类型和数字都是结构化数据
文本也可以是结构化数据,比如说ID,颜色,标签等
ES中的结构化搜索
bool,数字,时间,这种结构化的数据都有固定的格式,我们可以对其进行精确查询,范围查询,或者判断大小
文本类型的结构化数据,我们可以对其进行精确查询和部分查询
term query/prefix query
结构化结果只有是或者否
可以根据具体的场景进行设置是否需要打分机制
例
POST /products/_bulk {"index":{"_id":1}} {"productID":"XXXXXhhh-SSSS","desc":"iPhone","price":10,"issale":true,"createtime":"2020-01-01"} {"index":{"_id":2}} {"productID":"XXXXXhhh-AAAA","desc":"iPhone","price":20,"issale":false,"createtime":"2020-02-01"} {"index":{"_id":3}} {"productID":"XXXXXhhh-BBBB","desc":"iPhone","price":30,"issale":true,"createtime":"2020-03-01"} bool类型查询 GET products/_search { "query": { "term": { "issale": { "value": true } } } } 数字区间查询 GET products/_search { "query": { "range": { "price": { "gte":10, "lte":40 } } } } 日期区间查询 GET products/_search { "query": { "range": { "createtime": { "gte":"now-2y",//可以支持y/M/d/H/h/m/s/w(周) "lte":"now" } } } } GET products/_search { "query": { "range": { "createtime": { "gte":"2020-01-01", "lte":"2020-05-01" } } } } //非空值查询 GET products/_search { "query": { "exists": { "field": "prices" } } } 结果:查不到不存在的字段 { "took" : 4, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 0, "relation" : "eq" }, "max_score" : null, "hits" : [ ] } }
ES多值字段处理
例:
POST /movies/_bulk {"index":{"_id":1}} {"title":"long zeng hu dou","year":1995,"genre":"Comedy"} {"index":{"_id":2}} {"title":"dave","year":1993,"genre":["Comedy","longyan"]} GET movies/_search { "query": { "constant_score": { "filter": { "term": { "genre.keyword": "Comedy" } }, "boost": 1.2 } } } 结果: { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.2, "hits" : [ { "_index" : "movies", "_type" : "_doc", "_id" : "1", "_score" : 1.2, "_source" : { "title" : "long zeng hu dou", "year" : 1995, "genre" : "Comedy" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "2", "_score" : 1.2, "_source" : { "title" : "dave", "year" : 1993, "genre" : [ "Comedy", "longyan" ] } } ] } } 如果需要只查询包含一条数据的文档,需要指定count,新增一个冗余字段,用于记录多值字段的值的数量