elasticsearch深度搜索

复杂查询条件

IS NULL的查询
tags:[null]、tags:null均属于空值的范畴

{
    "query": {
        "constant_score": {
            "filter": {
                "bool": {
                    "must_not": {
                        "exists": {
                            "field": "age"
                        }
                    }
                }
            }
        }
    }
}

match查询必须匹配两个字段,默认下match是取或的关系,比如"match:{"name":"love you"}",查询的时候会先利用解析器分别通过term查询loveyou

{
    "query": {
        "constant_score": {
            "filter": {
                "match": {
                    "about": {
                        "query": "love to i",
                        "operator": "and"
                    }
                }
            }
        }
    }
}

term查询的例子

{
    "query": {
        "constant_score": {
            "filter": {
                "term": {
                    "about": "love"
                }
            }
        }
    }
}

精度的控制

{
    "query": {
        "constant_score": {
            "filter": {
                "match": {
                    "about": {
                        "query": "love i you",
                        "minimum_should_match": "75%"
                    }
                }
            }
        }
    }
}

minimum_should_match用于设置必须匹配的词数,可以是匹配的数量或者是输入的词的百分比,不管这个值设置为什么,至少要匹配一个词的文档才会返回

组合查询

通过 bool关键字来组合相关的查询,子查询可以是must,must_not,should之一,should中的子句可以都不需要满足,除非没有must子句的时候的至少需要匹配一个should中的条件。

{
    "query": {
        "bool": {
            "should": [{
                "match": {
                    "about": "love"
                }
            }, {
                "match": {
                    "about": "you"
                }
            }],
            "minimum_should_match": 2
        }
    }
}

其中的match也可以改为term当做全词匹配。

词的权重设置

{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "content": {
                        "query": "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [{
                    "match": {
                        "content": {
                            "query": "Elasticsearch",
                            "boost": 3
                        }
                    }
                },
                {
                    "match": {
                        "content": {
                            "query": "Lucene",
                            "boost": 2
                        }
                    }
                }
            ]
        }
    }
}

boost来设置某个词项的权重,默认是1,如果需要加强权重,可以设置一个大于1的值,值越大表现越重要。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ES 全文搜索 全文搜索 使用了match查询的多词查询只是简单地将生成的term查询包含在了一个bool查询中。...
    王某某的笔记阅读 9,069评论 0 2
  • 查询和过滤的区别 ES提供基于JSON的完整DSL来定义查询,查询DSL包括两种子句:叶查询子句:在特定的字段上查...
    写Bug的张小天阅读 8,374评论 0 2
  • 今天是周末,周末愉快,今天是我妈妈的生日,祝妈妈生日快乐。今天天气很好,看天气预报说今天24度,这个天出去风和日丽...
    金色麦穗_晓阅读 2,312评论 0 0
  • 导语:随着移动互联网的蓬勃发展,视频又焕发出新的生机,利用视频进行推广宣传将会越来越受到重视。今天紫菜头从视频推广...
    放下烦躁阅读 2,880评论 0 0
  • 我坐在橱窗里,外面是皑皑的白雪。天与地之间有许多无形的手臂相连接,我只好凝望着,这个莫须有爱的世界。 最初的光阴里...
    阿吉与柳阅读 1,567评论 0 0

友情链接更多精彩内容