es 搜索一

搜索: 结构化查询(Query DSL)和结构化过滤(Filter DSL)(过滤查询已被弃用,并在ES 5.0中删除)

  1. term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed(如果想要不被分词就把数据类型设置为keyword)的字符串(未经分析的文本数据类型)
  2. terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配
  3. range过滤允许我们按照指定范围查找一批数据
  4. exists过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件(missing也已经启用,可以通过must_not,exists来实现空的条件)
  5. bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:
    must :: 多个查询条件的完全匹配,相当于 and。
    must_not :: 多个查询条件的相反匹配,相当于 not。
    should :: 至少有一个查询条件匹配, 相当于 or。
    这些参数可以分别继承一个过滤条件或者一个过滤条件的数组
  6. 使用match_all 可以查询到所有文档,是没有查询条件下的默认语句。
  7. match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。如果你使用 match 查询一个全文本字段,它会在真正查询之前用分析器先分析match一下查询字符.
  8. multi_match查询允许你做match查询的基础上同时搜索多个字段
  9. match_phrase 短语匹配查询,match_phrase_prefix短语前缀匹配

测试用例

{
    "query":{
        "bool":{
            "must":[
                {
                    "exists":{
                        "field":"age"
                    }   
                },
                {
                    "multi_match":{
                        "query":"唐宋八大家",
                        "fields":["name","description"]
                    }   
                }
            ],
            "should":[
                    {"match":{"name":"商隐"}},
                    {"match":{"age":100}},
                    {
                        "bool":{
                            "must":{
                                    "match":{
                                        "birthdate":1998
                                    }
                            }
                        }
                    },
                    {"term":{"age":983}},
                    {
                        "range":{
                            "age":{
                                "gte":100,
                                "lte":1000
                            }
                        }
                    }
                ]
        }
    },
    "from":0,
    "size":10,
    "sort": [
        { "birthdate":   { "order": "desc" }},
        { "_score": { "order": "desc" }}
    ],
    "highlight":{
        "pre_tags": ["<p>"],
        "post_tags": ["</p>"], 
        "fields":{
            "description":{}
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容