elasticsearch-query-builder, 一款可以基于配置化以及参数绑定的ES语句构造神器

本文介绍了elasticsearch-query-builder,一个用于简化ES DSL查询语句构造的工具,支持配置化和参数绑定。内容涵盖工具的使用、参数说明、示例及未来改进方向。
摘要由CSDN通过智能技术生成

前言

在这里,我想向大家推荐一个我自己开发的项目,也就是elasticsearch-query-builder,这个项目目前在github上已经开源,有兴趣的朋友可以去fork或者star,你的star就是对我最大的鼓励。同时,本项目长期维护和更新,我也接受并且很高兴有小伙伴向本项目pull request,或者协同开发,有兴趣的同学可以给我发邮件。

elasticsearch-query-builder是一个非常方便构造elasticsearch(后面简称ES) DSL 查询语句的工具包,在elasticsearch-query-builder中,我尝试基于配置化的操作去构建ES的查询语句,并且接受外界传入参数,这极大的减少了在Java代码中构建ES查询语句的工作,并同时减少了代码量,使代码更加直观和清晰。基于使ES中DSL构造语句和Java代码分离的思想,elasticsearch-query-builder诞生了。去GithubFork!

构建

elasticsearch-query-builder工程一般作为jar包为别的工程提供使用,当然,如果需要基于本项目做二次开发,这都需要将Github上克隆本项目到本地

1
git clone https://github.com/xiaowei1118/elasticsearch-query-builder.git

在将本项目克隆到本地后,执行mvn package 将本项目打成jar包,或者直接将本项目作为你们自己maven项目的module项目。

elasticsearch-query-builder使用详细说明

elastcisearch-query-builder接受配置文件(特定json格式)或者json格式的字符串配置,配置格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
      
  "index": "user_portrait",
  "type": "docs",
  "from": "${from}",
  "size": "10",
  "include_source": ["name","age"],  //需要哪些字段
  "exclude_source": ["sex"],  //排除哪些字段
  "query_type": "terms_level_query",
  "terms_level_query": {
      
    "terms_level_type": "term_query",
    "term_query": {
      
      "value": "${value}",
      "key": "key",
      "boost": 2
    }
  },
  "aggregations": [
    {
      
      "aggregation_type": "terms",
      "name": "",
      "field": "field",
      "sub_aggregations": {
      
        "aggregation_type": "terms",
        "name": "sub",
        "field": "field",
        "size": "${size.value}",
        "sort": "asc",
        "sort_by": "_count"
      }
    }
  ],
  "highlight":{
      
      "fields": [
            {
      
              "field": "content",
              "number_of_fragment": 2,
              "no_match_size": 150
            }
       ],
      "pre_tags":["<em>"],
      "post_tags":["</em>"]
  },
  "sort": [
    "_score",
    {
      
      "field": "age",
      "order": "asc"
    }
  ]
}

参数说明
# index

index表示ES中的索引或者别名。

# type

type表示ES索引或者别名下的type。

# from

from表示检索文档时的偏移量,相当于关系型数据库里的offset。

# include_source

include_source 搜索结果中包含某些字段,格式为json数组,"include_source": ["name","age"]

ElasticSearch查询构建器 该chrome扩展程序提供了易于使用的界面来配置不同的权重并动态增强选定字段的搜索结果,这将通过提供获得所需搜索结果所需的索引设置和文档映射来减少学习曲线,并为您可以通过在ES中运行相同的查询来减少开发时间,并在“结果”面板中显示结果。 可以在运行时更改设置以微调搜索结果,并将所有设置保存在“收藏夹”中,以备后用。 连接到ElasticSearch Server:提及正在运行ES的主机和端口(10.240.0.251:9200),然后按connect按钮。 构建查询:连接到服务器后,它将在可用的“索引和文档”下拉列表中列出所有索引及其对应的文档。 选择要为其生成查询的文档。现在,在“配置”选项卡下,您可以看到所选文档的所有字段的列表。 “配置”选项卡“动态得分”下的“选项”:它用于从多个匹配记录中提升特定记录,该匹配记录除了具有搜索关键字之外,还具有在booster字段中定义的值。 以相同顺序搜索:优先考虑以相同顺序找到的单词,而不是以相同顺序反对在同一行中找到的单词。 特殊字符:这将允许搜索字母数字,camelCase和用特殊字符(如(_,-等)分隔的单词。 生成查询:基于选定的选项,它将动态生成所需的索引设置,文档映射并构建查询。 “配置”选项卡权重下的选项:如果在多个字段中找到相同的单词,则用于为该字段赋予优先级。 给定字段得分更高的记录将被赋予更高的优先级,并排在首位。 过滤器:用于过滤掉从查询中收到的结果。如果选择了任何过滤器和值,则只会显示满足过滤条件的记录。 可以通过按+/-按钮在不同的数字字段上添加/删除类似(必须,范围)的过滤器。在结果中显示:这允许配置要在结果中看到的字段。您可以选择结果数要与默认情况下要查看的字段一起显示,将显示前五个字段。 您可以根据需要选择任何字段。 查询结果将显示在表格中。 在字段中搜索:这使用户可以选择要为给定查询搜索的文档字段。 显示结果:此按钮将带有要搜索的单词以及要显示的结果的最大大小,并建立一个动态查询,该查询针对选择的文档索引触发,它将获取结果并显示在结果面板下。 支持语言:English
ES (Elasticsearch) 是由 Elasticsearch 公司提供的开源全文搜索及分析引擎,它基于 Lucene,用于构建高性能、分布式的大数据处理系统。ES 支持实时查询,并能高效地处理大量的日志、事件流和其他实时数据源。下面是一些常用的 ES 查询语句及其解释: ### 1. **基本搜索查询** 基础的全文搜索语句,查找包含指定关键字的所有文档。 ```json GET /index_name/_search { "query": { "match": { "field_name": "keyword" } } } ``` 这里 `index_name` 是索引名称,`field_name` 是需要搜索的字段名,`keyword` 是你要搜索的关键字。 ### 2. **范围查询** 用于查询特定范围内值的记录。 ```json GET /index_name/_search { "query": { "range": { "numeric_field": { "gt": 5, "lt": 10 } } } } ``` 在这个例子中,我们查询 `numeric_field` 字段大于5且小于10的记录。 ### 3. **聚合查询** 聚合查询用于对结果集进行统计汇总。 ```json GET /index_name/_search { "aggs": { "my_aggregation": { "terms": { "field": "category", "size": 10 }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } } ``` 这个查询会将所有文档按照 `category` 字段分组,并计算每个类别下平均价格。 ### 4. **过滤查询** 用于进一步缩小搜索结果的条件筛选。 ```json GET /index_name/_search { "query": { "bool": { "must": [ {"term": { "status": "active" }}, {"range": {"timestamp": { "gte": "2021-01-01T00:00:00Z", "lte": "2021-12-31T23:59:59Z" }}} ] } } } ``` 此查询将只返回状态为“active”且时间戳在2021年之间的文档。 ### 5. **高亮显示查询** 用于突出显示查询匹配到的结果。 ```json GET /index_name/_search { "highlight": { "pre_tags": ["<strong>"], "post_tags": ["</strong>"], "fields": { "title": {} } }, "query": { "match": { "title": "keyword" } } } ``` 这将在搜索结果的 `title` 字段中高亮显示匹配的关键字。 ### 相关问题: 1. **如何优 ES 性能?** 2. **ES 的索引是如何工作的?** 3. **在实际项目中如何安全地利用 ES 进行大规模数据检索?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值