自定义一种查询,类似于 terms
terms 查询的写法入下
{
"terms": {
"id": [1, 3]
}
}
我们定义一种支持按照分隔符,分隔后再进行 term
匹配的查询,名字叫 spiltToTerms
,写法入下
{
"spiltToTerms": {
"sep": ",",
"field": "id",
"terms": "1,3"
}
}
spiltToTerms
查询的实现是:先使用分隔符 sep
对 terms
进行分隔,分隔后再构造一个 terms
查询
docker-compose -p es-for-plugin-demo -f docker-compose-starter.yml up -d
使用es镜像的不是官方的镜像,是自己打包的 https://hub.docker.com/r/lanicc/elasticsearch-search-plugin-demo 关闭了xpack.security
http://localhost:5601/app/kibana#/dev_tools/console
# 创建索引
PUT a
# 添加数据
PUT a/doc/1
{
"id": 1
}
PUT a/doc/2
{
"id": 2
}
PUT a/doc/3
{
"id": 3
}
使用自定义的查询进行搜索
GET a/doc/_search
{
"query": {
"spiltToTerms": {
"sep": ",",
"field": "id",
"terms": "1,3"
}
}
}
可以执行 docker 目录下的脚本
- setup.sh: 安装es环境,包含elasticsearch和kibana
- package.sh: 源码编译打包
- install.sh: 打包好的插件安装到es容器,并重启生效
- destroy.sh: 销毁docker容器
# 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:
执行命令
docker-compose -p es-for-plugin-demo up -d
#es官方的镜像开启了xpack.security,默认密码elastic:changeme
项目根目录下执行
mvn clean package -Dmaven.test.skip=true
执行脚本
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