ElasticSearch常用json参数含义(get请求篇)

本文探讨了价格适中的小米手机在市场上的热门趋势,对比了不同品牌的选择策略,并提供了关键数据排序分析。

后续会不断更新

"query" : {

        "match_all" : {}

}

查询全部数据

"query" : {

        "match" : {

                ”title" : "干饭"  }

}

根据一定规则,查询和干饭有关的数据

”from" 

分页开始的位置
“size"分页展示的长度

”sort"  : {

        "price" : {

                "order" : "desc"

         }

}

根据order降序展示数据

"query" : {

        "bool" : {

            "must" : [

                {

                    "match" : {

                        "category" : "小米"

                    }

                },

                {

                    "match" : {

                        "price" : 1999.00

                    }

                }

            ]

        }

    }

必须要category为小米,price为1999.00

{

    "query" : {

        "bool" : {

            "should" : [

                {

                    "match" : {

                        "category" : "小米"

                    }

                },

                {

                    "match" : {

                        "category" : "华为"

                    }

                }

            ]

        }

    }

}

两种符合条件,并且算法是查询有关数据

{

    "query" : {

        "bool" : {

            "filter" : {

                "range" : {

                    "price" : {

                        "gt" : 5000

                    }

                }

            }

        }

    }

}

查询价格超过5000

{

    "properties" : {

        "name" : {

            "type" : "text",

            "index" : true

        },

        "sex" : {

            "type" : "keyword",

            "index" : true

        },

        "tel" : {

            "type" : "keyword",

            "index" : false

        }

    }

}

设置映射,

1.name设置为可以通过倒排索引进行查询。

2.sex设置为精准查询

3.tel设置为不能通过tel进行查询

<think> 我们之前讨论了HEAD请求,现在用户询问的是GET请求在Multi Elasticsearch Head复合查询中的使用。 根据用户上次的问题和回答,我们知道用户在使用docker安装了elasticsearch-head和elasticsearch 7.6.2,并遇到了跨域问题(引用[1])。现在用户想了解GET请求的使用方法。 在Elasticsearch中,GET请求主要用于检索数据。在Multi Elasticsearch Head插件中,GET请求可以通过以下方式使用: 1. 简单文档检索:通过指定索引、类型(在7.x之后类型默认为_doc)和文档ID来获取单个文档。 2. 搜索API:使用_search端点进行查询。 由于用户提到“复合查询”,可能涉及更复杂的查询DSL。下面我将详细介绍在Multi Elasticsearch Head中使用GET请求进行复合查询的方法。 注意:在Elasticsearch 7.x中,类型(type)已经被逐渐废弃,通常使用_doc作为默认类型。 步骤: 1. 连接Elasticsearch集群:确保已经正确连接,并且解决了跨域问题(如引用[1]中提到,需要在elasticsearch配置中添加http.cors相关配置)。 2. 在Multi Elasticsearch Head的复合查询界面中: - 选择请求方法为“GET” - 输入URL,格式为:`http://<host>:<port>/<index>/_search` (如果要查询所有索引,则使用`_all`或`*`作为索引名,或者直接使用`/_search`) - 在请求体中(如果有)输入查询的DSL(JSON格式) 3. 对于GET请求,虽然查询参数可以放在URL中(例如q=field:value),但复合查询通常使用请求体来传递复杂的查询条件。 注意:在Elasticsearch中,GET请求也可以携带请求体,但是有些HTTP客户端可能不允许GET请求带body,因此Elasticsearch也支持使用POST进行查询。但在Multi Elasticsearch Head中,GET请求允许携带请求体。 示例:查询名为“my_index”的索引中,字段“message”包含“error”的文档。 URL: `http://localhost:9200/my_index/_search` 请求体(选择“JSON格式): ```json { "query": { "match": { "message": "error" } } } ``` 4. 点击执行,查看返回结果。 另外,还可以使用URL参数进行简单查询,例如: `http://localhost:9200/my_index/_search?q=message:error` 但是复合查询通常需要更复杂的条件,所以推荐使用请求体。 关于复合查询的DSL,常见的有: - bool查询:可以组合多个查询条件(must, should, must_not, filter) - 范围查询、匹配查询、多匹配查询等 示例(bool查询): ```json { "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" } }, { "range": { "date": { "gte": "2020-01-01" }}} ] } } } ``` 5. 分页和排序:可以通过`from`、`size`和`sort`参数控制。 ```json { "from": 0, "size": 10, "sort": [ { "date": { "order": "desc" }} ], "query": { ... } } ``` 6. 返回结果解析:在Multi Elasticsearch Head的界面中,返回结果会以格式JSON显示,可以展开查看。 注意:在使用GET请求进行复合查询时,确保Elasticsearch集群已经正确配置跨域,否则可能无法成功请求(参考用户引用[1]中提到的添加http.cors配置)。 另外,用户之前提到安装了elasticsearch-head:5,这是一个较老的版本,可能对Elasticsearch 7.x的支持不完全,建议确认插件版本兼容性。 最后,由于GET请求的URL长度有限制,如果查询条件非常复杂,建议使用POST请求来提交查询(尽管这里用户问的是GET,但也要告知限制)。 因此,总结步骤: - 配置跨域(如果尚未解决) - 在复合查询界面选择GET方法 - 输入正确的URL(包括索引和_search端点) - 在请求体中编写查询DSL(JSON格式) - 执行并查看结果 引用说明: [^1]: 用户提供的引用[1]中提到了跨域问题,因此我们在使用GET请求进行复合查询前,必须确保跨域配置正确。 相关问题: 1. 在复合查询中,GET和POST方法有什么区别? 2. 如何解决Elasticsearch-head连接Elasticsearch 7.x时的跨域问题? 3. 复合查询中常用的DSL语法有哪些? 4. 如何进行分页和排序? </think> 在 Multi ElasticSearch Head 中进行 GET 请求(复合查询)是检索数据的核心操作,以下是详细使用指南: ### 一、GET 请求核心功能 1. **文档检索** `GET /index/_doc/id` → 获取指定文档[^1] 2. **索引查询** `GET /index/_search` → 搜索整个索引 3. **集群状态检查** `GET /_cluster/health` → 获取集群健康状态 ### 二、复合查询操作步骤(带请求体) 1. **输入目标 URL** ``` http://<ES节点>:9200/<索引名>/_search ``` (示例:`http://localhost:9200/products/_search`) 2. **选择请求方法** 在下拉菜单选择 `GET` 3. **添加查询 DSL**(关键步骤) 在请求体区域输入 JSON 格式的查询语句: ```json { "query": { "bool": { "must": [ {"match": {"name": "手机"}}, {"range": {"price": {"gte": 1000}}} ], "filter": [ {"term": {"category": "电子产品"}} ] } }, "sort": [{"create_time": "desc"}], "from": 0, "size": 10 } ``` 4. **设置请求头**(解决跨域问题) 添加 Header: ``` Content-Type: application/json ``` 5. **执行查询** 点击 ▶️ 按钮发送请求 ### 三、典型查询类型(DSL示例) | 查询类型 | DSL 示例 | 用途 | |----------------|--------------------------------------------------------------------------|--------------------------| | 匹配查询 | `{"match": {"title": "elasticsearch"}}` | 文本字段模糊匹配 | | 精确过滤 | `{"term": {"status": 1}}` | 精确值过滤 | | 范围查询 | `{"range": {"price": {"gte": 100, "lte": 500}}}` | 数值/日期范围过滤 | | 布尔复合查询 | `{"bool": {"must": [...], "should": [...], "must_not": [...]}}` | 组合多个查询条件 | | 聚合分析 | `"aggs": {"avg_price": {"avg": {"field": "price"}}}` | 计算平均值等统计分析 | ### 四、结果解析技巧 1. **核心字段说明**: ```json { "took": 15, // 查询耗时(毫秒) "hits": { "total": { "value": 42 }, // 匹配文档总数 "hits": [ // 结果文档列表 { "_source": { ... } // 原始文档数据 } ] }, "aggregations": { ... } // 聚合结果 } ``` 2. **结果高亮显示**: 在查询中添加高亮配置: ```json "highlight": { "fields": {"content": {}} } ``` ### 五、常见问题解决 1. **跨域访问失败**(参考用户文档[^1]) 在 `elasticsearch.yml` 添加: ```yaml http.cors.enabled: true http.cors.allow-origin: "*" ``` 2. **无数据返回检查项**: - 确认索引名称拼写正确 - 检查查询条件是否过严 - 验证字段映射类型(如 text vs keyword) 3. **性能优化建议**: - 使用 `filter` 替代 `must` 避免计算相关性得分 - 限制返回字段:`"_source": ["field1", "field2"]` - 分页查询时避免深分页(使用 search_after 替代 from/size) > 提示:复合查询支持所有 Elasticsearch DSL 语法,可通过 Kibana Dev Tools 先测试查询再复制到 Head 插件执行[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱分享的小邓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值