• Elasticsearch插件开发之自定义搜索语法


    搜索查询——自定义查询

    源码

    自定义一种查询,类似于 terms

    terms 查询的写法入下

    {
        "terms": {
            "id": [1, 3]
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们定义一种支持按照分隔符,分隔后再进行 term 匹配的查询,名字叫 spiltToTerms,写法入下

    {
        "spiltToTerms": {
            "sep": ",",
            "field": "id",
            "terms": "1,3"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    spiltToTerms 查询的实现是:先使用分隔符 septerms 进行分隔,分隔后再构造一个 terms 查询

    体验

    可以执行 docker 目录下的脚本

    • setup.sh: 安装es环境,包含elasticsearch和kibana
    • package.sh: 源码编译打包
    • install.sh: 打包好的插件安装到es容器,并重启生效
    • destory.sh: 销毁docker容器

    使用docker安装es环境

    # https://www.elastic.co/guide/en/elasticsearch/reference/5.5/docker.html
    # https://www.elastic.co/guide/en/kibana/5.5/_configuring_kibana_on_docker.html
    version: '2'
    services:
      es_for_plugins_demo:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.3.3
        container_name: es_for_plugins_demo
        environment:
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        mem_limit: 1g
        ports:
          - 9200:9200
        networks:
          - es_net
      kibana_for_plugins_demo:
        image: docker.elastic.co/kibana/kibana:5.3.3
        container_name: kibana_for_plugins_demo
        environment:
          ELASTICSEARCH_URL: http://es_for_plugins_demo:9200
        ports:
          - 5601:5601
        networks:
          - es_net
    
    volumes:
      esdata1:
        driver: local
      esdata2:
        driver: local
    
    networks:
      es_net:
    
    
    • 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

    执行命令

    docker-compose -p es-for-plugin-demo up -d
    #默认密码elastic:changeme
    
    • 1
    • 2

    编译源码打包插件

    项目根目录下执行

    mvn clean package -Dmaven.test.skip=true
    
    • 1

    安装插件

    执行脚本

    es_container=es_for_plugins_demo
    docker exec $es_container /usr/share/elasticsearch/bin/elasticsearch-plugin remove es-plugin-search-demo
    docker cp ../search-plugin-demo/target/releases/search-plugin-demo-1.0-SNAPSHOT.zip $es_container:/usr/share/elasticsearch/search-plugin-demo-1.0-SNAPSHOT.zip
    docker exec $es_container /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///usr/share/elasticsearch/search-plugin-demo-1.0-SNAPSHOT.zip
    
    docker restart $es_container
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    登录kibana体验

    http://localhost:5601/app/kibana#/dev_tools/console

    默认密码elastic:changeme

    # 创建索引
    PUT a
    
    # 添加数据
    PUT a/doc/1
    {
      "id": 1
    }
    
    PUT a/doc/2
    {
      "id": 2
    }
    
    
    PUT a/doc/3
    {
      "id": 3
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    使用自定义的查询进行搜索

    GET a/doc/_search
    {
      "query": {
        "spiltToTerms": {
          "sep": ",",
          "field": "id",
          "terms": "1,3"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    C Primer Plus(6) 中文版 第7章 C控制语句:分支和跳转 7.5 条件运算符 ?:
    Linux信号
    基于matlab实现的多普勒频移海底混响点散射模型程序
    C++PrimerPlus(第6版)中文版:Chapter16.5.1函数对象_函数符概念
    银行数据采集,数据补录与指标管理3大问题如何解决?
    Linux环境安装
    国信证券笔试题总分120分
    Centos7使用Nginx配置HTTPS正向代理
    计算机竞赛 大数据房价预测分析与可视
    后悔怎么没早点看到!腾讯T3整理实战书籍:(Spring MVC +MyBatis快速开发与项目实战pdf)
  • 原文地址:https://blog.csdn.net/qq_26824159/article/details/125897654