这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战;
备注:继Elasticsearch笔记(8)
过滤器
对搜索出来的结果进行数据过滤。不会到es库里去搜,不会去计算文档的相关度分数,所以过滤的性能会比较高,过滤器可以和全文搜索结合在一起使用。 post_filter元素是一个顶层元素,只会对搜索结果进行过滤。不会计算数据的匹配度相关性分数,不会根据分数去排序,query则相反,会计算分数,也会按照分数去排序。 使用场景:
- query:根据用户搜索条件检索匹配记录
- post_filter:用于查询后,对结果数据的筛选
实操:查询账户金额大于80元,小于160元的用户。并且生日在1998-07-14的用户
-
gte:大于等于
-
lte:小于等于
-
gt:大于
-
lt:小于 (除此以外还能做其他的match等操作也行)
#POST /{index}/_doc/_search
{
"query": {
"match": {
"comefrom": "河北"
}
},
"post_filter": {
"range": {
"age": {
"gt": 20,
"lt": 25
}
}
}
}
#查询结果:河北的一共有两个人 通过post_filter过滤了年龄
{
"took": 22,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "jacuesh",
"_type": "_doc",
"_id": "1002\n",
"_score": 0.2876821,
"_source": {
"id": 1002,
"age": 21,
"username": "刘慧鹏",
"nickname": "鹏鹏",
"comefrom": "河北省邯郸市",
"sex": 1,
"birthday": "1998-10-21",
"class": "计算机科学以技术1班"
}
}
]
}
}
排序
es的排序同sql,可以desc也可以asc。也支持组合排序。
实操:
# POST /{index}/_doc/_search
{
"query": {
"match": {
"comefrom": "河北"
}
},
"post_filter": {
"range": {
"age": {
"gt": 20,
"lt": 25
}
}
},
"sort": [
{
"age": "desc"
},
{
"birthday": "desc"
}
]
}
##################注意##################
文本类型如果需要排序 得指定里面的keyword
{
"sort": [
{
"nickname.keyword": "asc"
}
]
}
高亮显示
#POST /{index}/_doc/_search
{
"query": {
"match": {
"comefrom": "河北"
}
},
"highlight": {
"pre_tags": ["<tag>"],
"post_tags": ["</tag>"],
"fields": {
"comefrom": {}
}
}
}
拓展 - prefix-fuzzy-wildcard
prefix(前缀查询)
根据前缀去查询
POST /{index}/_doc/_search
{
"query": {
"prefix": {
"desc": "imo"
}
}
}
fuzzy(模糊搜索)
模糊搜索,并不是指的sql的模糊搜索,而是用户在进行搜索的时候的打字错误现象,搜索引擎会自动纠正,然后尝试匹配索引库中的数据。
# POST /{index}/_doc/_search
{
"query": {
"fuzzy": {
"desc": "imoov.coom"
}
}
}
# 或多字段搜索
{
"query": {
"multi_match": {
"fields": [ "desc", "nickname"],
"query": "imcoc supor",
"fuzziness": "AUTO"
}
}
}
{
"query": {
"multi_match": {
"fields": [ "desc", "nickname"],
"query": "演说",
"fuzziness": "1"
}
}
}
wildcard(占位符查询)
占位符查询。
-
?:1个字符
-
*:1个或多个字符
#POST /{index}/_doc/_search { "query": { "wildcard": { "desc": "*oo?" } } } { "query": { "wildcard": { "desc": "演*" } } }