• 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
  • 相关阅读:
    【docker容器技术与K8s】
    Python.迭代器对象iter()(基于iterator特性拆解繁复的单行“装逼代码”,搞明白序列定长元素选取“秘法”。)
    域名限制注册有哪些原因?
    玄机平台应急响应—Linux入侵排查
    wsgiref模块、web框架、django框架简介
    flutter开发实战 - inappwebview设置cookie
    OpenCV-Python快速入门(二):图像基础
    2014
    【Spring Cloud】认识微服务架构,拆分简单的 Demo 实现服务的远程调用
    asp.net core EF Core 添加种子数据
  • 原文地址:https://blog.csdn.net/qq_26824159/article/details/125897654