常用六个查询:
基本查询_source过滤结果过滤高级查询排序高亮 导入数据,这里是采用批处理的API,大家直接复制到kibana运行即可,注意千万别使用kibana的格式化 POST /heima/goods/_bulk {"index":{}} {"title":"大米手机","images":"http://image.leyou.com/12479122.jpg","price":3288} {"index":{}} {"title":"小米手机","images":"http://image.leyou.com/12479122.jpg","price":2699} {"index":{}} {"title":"小米电视4A","images":"http://image.leyou.com/12479122.jpg","price":4288}基本语法
post /索引库名/_search { "query" : { "查询类型" : { "查询条件" : "查询条件值" } } }这里的query代表一个查询对象, 里面可以有不同的查询属性
查询类型: 例如: match_all, match, term, range 等等查询条件: 查询条件根据类型不同, 写法也有差异,match 类型查询, 会把查询条件进行分词, 然后进行查询, 多个词条之间是or的关系
post /test/_search { "query" : { "match" : { "title" : "小米电视4A" } } }在上面的案例中, 不仅会查询到电视, 而且与小米相关的都会查询到, 多个词之间是or关系
multi_match 与 match 类似, 不同的是 他可以在多个字段中查询
post /test/_search { "query" : { "multi_match" : { "query" : "小米", "fields": ["title", "subtitle"] } } }term查询被用于精确值 匹配, 这些精确值可能是 数字、时间、布尔或那些未分词的字符串
post /test/_search { "query" : { "term" : { "price" : 2699 } } } post /test/_search { "query" : { "term" : { "price" : { "value" : 2699 } } } }terms 查询和term查询一样, 但它允许你指定多值匹配. 如果这个字段包含值中的任何一个值, 那么这个文档满足条件, 类似与mysql的in:
post /test/_search { "query" : { "terms" : { "price" : [2699, 5288] } } }默认情况下, es在搜索的结果中, 会把文档保存在_source的所有字段都返回. 如果我们只想获取其中的部分字段, 我们可以添加 _source 的过滤
与下面的结果将是一样的
post /test/_search { "_source" : { "excludes" : ["image", "subtitle"] }, "query" : { "term" : { "price" : 2699 } } }bool 把各种其他查询通过 must(与) must_not(非)的方式进行组合
post /test/_search { "query" : { "bool" : { "must" : {"match": {"title":"小米"}}, "must_not" : {"match":{"title":"电视"}} } } }fuzzy自动将拼写错误的搜索文本, 进行纠正, 纠正以后去尝试索引中的数据 它允许用户搜索词条与实际词条出现偏差, 但是偏差的编辑距离不得超过2:
post /test/_search { "query" : { "fuzzy" : { "title" : "appla" } } }上面的查询, 也能查询到apple手机 fuzziness 你的搜索文本最多可以纠正几个字母取跟你的数据进行匹配, 默认如果不设置, 就是2我们可以通过
post /test/_search { "query" : { "fuzzy" : { "title" : { "value" : "apple3", "fuzziness": 2 } } } }sort 可以让我们按照不同的字段进行排序, 并且 通过order 指定排序的方式
post /test/_search { "query" : { "match_all": {} }, "sort" : { "price" : "desc" } }假定我们想要结合使用price 和 _score(得分)进行查询, 并且匹配的结果首先按照价格排序, 然后按照相关性得分排序:
post /test/_search { "query" : { "match_all" : {} }, "sort" : [ {"price" : {"order": "desc"}}, {"_score" : {"order" : "desc"}} ] }在使用match查询的同时, 加上一个highligh属性:
pre_tags 前置标签post_tags 后置标签fields : 需要高亮的字段 title: 这里声明title字段需要高亮, 后面可以为这个字段设置特有配置, 也可以为空size: 每页显示多少条 from : 当前页起始索引, int start = (pageNum - 1) * size;