一 tika

docker pull logicalspark/docker-tikaserver # only on initial download/update
docker run –rm -p 9998:9998 logicalspark/docker-tikaserver
Docker Server
测试服务器
curl -X GET http://localhost:9998/tika
his is Tika Server (Apache Tika 1.27). Please PUT

获取meta
curl -T test.pdf http://localhost:9998/meta –header “Accept: application/json”

获取文档内容
curl -T test.pdf http://localhost:9998/tika –header “Accept: text/html” # 返回html,带标签,可不带header

文档
https://wiki.apache.org/tika/TikaJAXRS
————————————————
版权声明:本文为CSDN博主「Wind_white」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wind_white/article/details/78817704
Default
You can pull down the version you would like using:
docker pull apache/tika:
Then to run the container, execute the following command:
docker run -d -p 9998:9998 apache/tika:
Custom Config
From version 1.25 and 1.25-full of the image it is now easier to override the defaults and pass parameters to the running instance.
So for example if you wish to disable the OCR parser in the full image you could write a custom configuration:
cat <> tika-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<properties>
  <parsers>
      <parser class="org.apache.tika.parser.DefaultParser">
          <parser-exclude class="org.apache.tika.parser.ocr.TesseractOCRParser"/>
      </parser>
  </parsers>
</properties>

EOT
Then by mounting this custom configuration as a volume, you could pass the command line parameter to load it
docker run -d -p 9998:9998 -v pwd/tika-config.xml:/tika-config.xml apache/tika:1.25-full –config /tika-config.xml

二 elasticsearch

一、 安装并运行elasticsearch

Docker stats查看内存消耗情况

1.镜像拉取

查看版本
docker search elasticsearch
下载镜像
docker pull elasticsearch:7.14.2
运行es

2.启动

docker run -it -e “discovery.type=single-node” –name=”es714” -p 9200:9200 -p 9300:9300 elasticsearch
持久化数据
docker run -p 9200:9200 -p 9300:9300 –name es714 -e “discovery.type=single-node” -e “TAKE_FILE_OWNERSHIP=true” -v c:/es/logs:/usr/share/elasticsearch/logs -v c:/es/data:/usr/share/elasticsearch/data -d 2ab
docker run -p 9200:9200 -p 9300:9300 –name es714 -e “discovery.type=single-node” -e “TAKE_FILE_OWNERSHIP=true” -v c:/es/logs:/usr/share/elasticsearch/logs -v c:/es/data:/usr/share/elasticsearch/data -d 2ab
docker——设置——共享驱动
输入电脑登录密码,因此,电脑必须设置登录密码,空密码不行

docker run -p 9200:9200 -p 9300:9300 –name es -e “discovery.type=single-node” -e “ES_JAVA_OPTS=-Xms300m -Xmx300m” -e “TAKE_FILE_OWNERSHIP=true” -v /es/logs:/usr/share/elasticsearch/logs -v /es/data:/usr/share/elasticsearch/data -d 41072cdeebc
说明:
9200是es和外部通讯的端口,9300是es集群之间通讯的接口
-e “discovery.type=single-node”:配置为单一集群方式,即只有自己一个集群
-e “ES_JAVA_OPTS=-Xms300m -Xmx300m”:设置运行内存是300m,默认是1g,可能启动不了
“TAKE_FILE_OWNERSHIP=true”:把logs、data目录的权限给es
-v 映射目录到本机,先要建立目录吧mkdir -p /es/logs mkdir -p /es/data

如果出现连接不成功需要配置/config/elasticsearch.yml文件,加入开放远程访问:

http.cors.enabled: true
http.cors.allow-origin: “*”

平面人(省水电院秦工) 22:17:00
本机需要建立好这个目录吗

孤狼 22:17:24
./的话不必

3.修改配置,跨域访问问题

把文件拷贝出来修改
docker cp f47:/usr/share/elasticsearch/config/elasticsearch.yml c:/
docker cp elasticsearch.yml f47:/usr/share/elasticsearch/config
docker restart……

1.进入容器

fengweideMacBook-Pro:~ jerry.feng$ docker exec -it bf3 /bin/bash
root@b8c7c128df2f:/usr/share/elasticsearch# ls
NOTICE.txt README.textile bin config data lib logs modules plugins
root@b8c7c128df2f:/usr/share/elasticsearch# cd config/
root@b8c7c128df2f:/usr/share/elasticsearch/config# ls
elasticsearch.yml log4j2.properties scripts

Linux系统分为两种:

1.RedHat系列:Redhat、Centos、Fedora等——docker是centos
2.Debian系列:Debian、Ubuntu等

RedHat系列的包管理工具是yum

Debian系列的包管理工具是apt-get

查看系统版本:

cat /proc/version
————————————————
版权声明:本文为CSDN博主「悟红尘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010741032/article/details/102606888

2.编辑 elasticsearch.yml

root@b8c7c128df2f:/usr/share/elasticsearch/config# vim elasticsearch.yml

  1. 如果容器中没有vim命令
    安装 vim
    首先apt-get update
    然后apt-get install vim——换成yum
    [root@33cc2e528a9e config]# yum install vim
    CentOS Linux 8 - AppStream 555 kB/s | 9.6 MB 00:17
    CentOS Linux 8 - BaseOS
    安装完,再编辑vim elasticsearch.yml-
    在文件末尾加上-进入vim编辑器,按i键转为插入模式
    http.cors.enabled: true
    http.cors.allow-origin: “*”

//xpack.security.enabled: true

https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html

编辑完,esc
:wq!保存退出
配置修改完成,重启容器。
要重启es服务吧?docker restart bf3

Centos里搜索文件
find / -name vendor.js

4.浏览器连接测试

通过浏览器可以通过映射的9200端口,访问;如果能有基本的信息访问,说明elasticsearch服务启动成功。

二、安装es-head-master工具

拉取镜像
docker pull mobz/elasticsearch-head:5
运行
docker run -it –name=”es-admin” -p 9100:9100 mobz/elasticsearch-head:5

docker run -d –name my-es_admin -p 9100:9100 mobz/elasticsearch-head:5

5.浏览器连接测试

连接测试,浏览器输入http://localhost:9100/
页面上有9200……能连接上http://localhost:9200/ 说明启动完成

三、安装ik分词器

elasticsearch分词器,对中文分词并不是太友好。这里我们可以下载开源的IK分词器,来解决这一问题。
IK与ES版本兼容 ,详情请参考https://github.com/medcl/elasticsearch-analysis-ik
IK version ES version
master 7.x -> master
6.x 6.x

1.进入elasticsearch容器->plugins 目录下
fengweideMacBook-Pro:~ jerry.feng$ docker exec -it bf3 /bin/bash
root@b8c7c128df2f:/usr/share/elasticsearch# ls
NOTICE.txt README.textile bin config data lib logs modules plugins
root@b8c7c128df2f:/usr/share/elasticsearch# cd plugins/
先安装wget
yum -y install wget
2.下载资源
*elasticsearch 5.0 后的版本都不支持插件在线安装的方式。elasticsearch-plugin
具体可以参考 https://github.com/medcl/elasticsearch-analysis-ik/issues/344
已经fix了。
3.现在可以通过下载资源方式安装
在git上查看release版本,对应zip的地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.2/elasticsearch-analysis-ik-7.14.2.zip

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.2/elasticsearch-analysis-ik-7.14.2.zip

下载完成
elasticsearch-analysis-ik-5.6.12.zip 100%[=============================================================================================================>] 4.29M 1.27MB/s in 3.4s

2019-01-14 11:21:40 (1.27 MB/s) - ‘elasticsearch-analysis-ik-5.6.12.zip’ saved [4502362/4502362]

root@b8c7c128df2f:/usr/share/elasticsearch/plugins# ls
elasticsearch-analysis-ik-5.6.12.zip

  • 这里需要注意的是ik 分词器的版本。需要与elasticsearch版本相对应,否者后面会启动失败。
    4.解压
    unzip xx 重命名为ik
    5.重启
    Elasticsearch

6.手动下载
解压到docker当前目录下的ik文件夹
docker cp ik bf3:/usr/share/elasticsearch/plugins/
重新启动,即可加载IK分词器
docker restart bf3
7.分词测试
Windows不认识 curl 的 ‘’,改成””
Json不能放命令里,必须放当前文件夹的文件里。
C:\Users\Administrator>curl -X PUT “localhost:9200/customer/doc/1?pretty&pretty” -H “Content-Type: application/json” d@1.json"">-d@1.json

1.json文件内容:{ “name”: “John Doe”}
返回:
{
index” : “customer”,
type” : “doc”,
id” : “1”,
version” : 1,
“result” : “created”,
shards” : {
“total” : 2,
“successful” : 1,
“failed” : 0
},
seq_no” : 0,
primaryterm” : 1
}
/analyze?tokenizer=whitespace
curl -X POST “localhost:9200/customer/
analyze?pretty” -H “Content-Type: application/json” d@2.json"">-d@2.json

2.json文件内容:
{
“analyzer”: “chinese”,
“text”: “中华人民共和国国歌”
}
{
“analyzer”: “ik_max_word”,
“text”: “中华人民共和国国歌”
}
Postman测试:
必须勾选headers里下面2个。技巧:先填写body,选择json,然后再到headers里,默认contenttype就是json了……
另外,返回值headers里提示安全问题,在生产环境需要设置安全……:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html

进入opt目录,新建es文件夹,并在es下创建data,plugins/ik文件夹
下载ik:https://github.com/medcl/elasticsearch-analysis-ik/releases
下载好后解压到opt/es/plugins下的ik目录里
运行es:
docker run -d –name elasticsearch -p 9200:9200 -p 9300:9300 -e “ES_JAVA_OPTS=-Xms300m -Xmx300m” -e “discovery.type=single-node” -v /opt/es/data:/usr/share/elasticsearch/data -v /opt/es/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.6.1

8.保存镜像
docker commit bf3 elasticsearch7.14.21
9.导出镜像
docker save -o fei2elasticsearch7.14.21.tar elasticsearch7.14.21

10.快速部署docker和elastic、tika服务
docker load < fei2elasticsearch7.14.21.tar
docker load < fei2tika1.27.tar
docker images
docker run ……

5.elasticsearch-head 的增删改查
5.1 创建索引(index) request PUT类型

5.2 创建类型(type) request POST类型

5.3 查询 request post类型
5.3.1 查询所有

也可以在基本查询框操作

5.3.1 删除 request DELETE
url后面直接跟_id

————————————————
版权声明:本文为CSDN博主「fw19940314」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fw19940314/article/details/86482971

(4) 修改配置文件
因为elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件
进入容器:
docker exec ‐it tensquare_elasticsearch /bin/bash

此时,我们看到elasticsearch所在的目录为/usr/share/elasticsearch ,进入config看到了配置文件elasticsearch.yml。我们通过vi命令编辑此文件,尴尬的是容器并没有vi命令 ,咋办?我们需要以文件挂载的方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置
文件的修改。
(5) 拷贝配置文件到宿主机
首先退出容器,然后执行命令:

docker cp 841:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml

(6) 停止和删除原来创建的容器

docker stop tensquare_elasticsearch
docker rm tensquare_elasticsearch

(7) 重新执行创建容器命令

docker run ‐di ‐‐name=tensquare_elasticsearch ‐p 9200:9200 ‐p 9300:9300 ‐v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8

(8) 修改配置文件
修改/usr/share/elasticsearch.yml 将 transport.host: 0.0.0.0 前的#去掉后保存文件退出。其作用是允许任何ip地址访问elasticsearch .开发测试阶段可以这么做,生产环境下指定具体的IP。

(9) 重启启动

docker restart tensquare_elasticsearch

重启后发现重启启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为
elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存
区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以
我们还需要系统调优。
(10) 系统调优
我们一共需要修改两处修改/etc/security/limits.conf ,追加内容(不要忘了*):

  • soft nofile 65536
  • hard nofile 65536

如果limits.conf是只读文件,则退出vim或者vi,修改此文件权限:

sudo chmod +777 limits.conf

nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制修改/etc/sysctl.conf,追加内容:

vm.max_map_count=655360

限制一个进程可以拥有的VMA(虚拟内存区域)的数量执行下面命令 修改内核参数马上生效:

sysctl ‐p

(11) 重新启动虚拟机,再次启动容器

2 IK分词器安装

(1) 下载与elasticsearch对应的版本
https://github.com/medcl/elasticsearch-analysis-ik/releases
(2) 将下载的文件上传至宿主机
(3) 在宿主机中将ik文件夹拷贝到容器内 /usr/share/elasticsearch/plugins 目录下:
拷贝前先解压,解压后的文件夹名有可能不是ik,执行命令:

cp -r elasticsearch ik

拷贝:

docker cp ik 841:/usr/share/elasticsearch/plugins/

(4) 重新启动,即可加载IK分词器

docker restart 841

3 HEAD插件安装

(1) 修改/usr/share/elasticsearch.yml ,添加允许跨域配置

http.cors.enabled: true
http.cors.allow‐origin: “*”

(2) 重新启动elasticseach容器
(3) 下载head镜像

docker pull mobz/elasticsearch‐head:5

(4) 创建head容器

docker run ‐di ‐‐name=myhead ‐p 9100:9100 mobz/elasticsearch‐head:5

(5) 测试
浏览器中输入http://宿主机ip:9100
连接http://宿主机ip:9200

————————————————
版权声明:本文为CSDN博主「黑面|书生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44533129/article/details/107435074

docker 安装ElasticSearch的中文分词器IK

方式一:在线安装

进入容器
docker exec -it elasticsearch /bin/bash
在线下载并安装
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.4/elasticsearch-analysis-ik-6.5.4.zip

进入plugins可以看到IK分词器已经安装成功

方式二:离线安装

将IK分词器上传到/tmp目录中

将压缩包移动到容器中
docker cp /tmp/elasticsearch-analysis-ik-6.5.4.zip elasticsearch:/usr/share/elasticsearch/plugins
进入容器
docker exec -it elasticsearch /bin/bash
创建目录
mkdir /usr/share/elasticsearch/plugins/ik
将文件压缩包移动到ik中
mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-6.5.4.zip /usr/share/elasticsearch/plugins/ik
进入目录
cd /usr/share/elasticsearch/plugins/ik
解压
unzip elasticsearch-analysis-ik-6.5.4.zip
删除压缩包
rm -rf elasticsearch-analysis-ik-6.5.4.zip

退出并重启镜像
exit
docker restart elasticsearch
测试

ES存储结构 Mysql存储结构
Index(索引) 表
文档 行,一行数据
Field(字段) 表字段
mapping(映射) 表结构定义
ES是面向文档的数据库,文档是ES存储的最基本的存储单元,文档蕾丝mysql表中的一行数据。其实在ES中,文档指的就是一条JSON数据。ES中文档使用JSON格式存储,因此存储上要比mysql灵活的很多,因为ES支持任意格式的json数据。
我们在实际项目开发中,一个索引只会存储格式相同的数据。
index:代表当前json文档所属的文档名字
type:代表当前json文档所属的类型。不过在es7.0以后废弃了type用法,但是元数据还是可以看到的
_id:文档唯一ID,如果我们没有为文档指定id,系统自动生成。
_source:代表我们插入进入json数据
_version:文档的版本号,每修改一次文档数据,字段就会加1,这个字段新版es也给取消了
_seq
no:文档的编号,替代老的 version字段
primaryterm:文档所在主分区,这个可以跟seq_no字段搭配实现乐观锁
1.5 mapping
Elasticsearch的mapping类似于mysql中的表结构体定义,每个索引都有一个映射的规则,我们可以通过定义索引的映射规则,提前定义好文档的json结构和字段类型,如果没有定义索引的映射规则,ElasticSearch会在写入数据的时候,根据我们写入的数据字段推测出对应的字段类型,相当于自动定义索引的映射规则。

注意:ES的自动映射是很方便的,但是实际业务中,对于关键字段类型,我们都是通常预先定义好,这样可以避免ES自动生成的字段类型不是你想要的类型。

3. 查询

  • 简易版的查询
  1. 根据多个id 进行查询
    GET /index/type/_mget
    {
    “ids”:[“1”,2]
    }
  2. 查询年龄为21 的
    GET /index/type/search?q=age:21
  3. 查询年龄在30到60岁之间并且年龄降序,从0条数据到第1条数据
    GET /intex/type/search?q=age[30 TO 60]&sort=age:desc&from=0&size=1
  4. 查询年龄在30到60岁之间并且年龄降序,从0条数据到第1条数据,展示name 和age 字段
    GET /intex/type/search?q=age[30 TO 60]&sort=age:desc&from=0&size=1 &_source=name,age
  • DSL查询(结构化查询)
    DSL查询 更为直观也更为简便,使用较多。
    DSL查询是POST过去一个json,由于POST请求是json 格式的,所以有更多的灵活性,也有很多形式。
  • term 与 match 的区别
    term查询会采用精确匹配,不会对字段进行分词查询。match 会根据该字段的分词器进行分词查询。模糊匹配
GET  /index/type/_search
{
"query":{
    "match":{
          "car":"奥迪A"
            }
        }
}
GET  /index/type/_search
{
“from” :0,
“size”:2,
“_source”:["name","age"]
"query":{
"term":{
        "car":"奥迪A"
        }
    }
}

2.自定义扩展字典(分词器文件)

在/usr/local/elasticsearch-6.4.3/plugins/ik/config 目录下
vi custom/new_word.dic
王者荣耀
马云
保存的时候要把es停掉,不然保存报错
vi IKAnalyzer.cfg.xml
在key=”ext_dict” 里吧/custom/newword.dic加进去

  1. 文档映射
    文档映射就是给文档中的字段指定字段类型、分词器
    es中索引index相当于数据库,类型Type相当于数据表,映射Mapping相当于数据表的表结构。es中的映射用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器以及属性等等。
    GET /index/type/_mapping
    1.动态映射
    在es中不需要事先定义映射,文档写入es时,会根据文档字段自动识别类型,这种机制称之为动态映射。
    2.静态映射
    在es中也可以事先定义好映射,包含文档的各个字段及其类型,这种方式称之为静态映射
    6.es类型支持
    一.基本类型
    符串:string 包括text 和keyword
    keyword类型不能分词,keyword类型可以分词查询
    数值型: long 、integer、short、byte 、float
    日期型: date
    布尔类型:boolean
    二进制型:binary
    数组类型: Array datatype
    二 、复杂类型
    地理位置类型(Geo datatypes)
    1.地理坐标类型(Geo-point datatypes):用于经纬度坐标
    2.地理形状类型(Geo-Shape datatypes):用于类似于多边形的复杂形状
    特定类型
    1.Pv4类型:ip用于ipv4地址
    2.Completion类型:提供自动补全建议

常用的条件查询
term
term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词拆解。

GET cms_index/_search
{
  "query" : {
    "term": {
      "id": "22"
    }
  }
}
terms
GET cms_index/_search
{
  "query" : {
    "terms": {
      "id": ["22","23"]
    }
  }
}

match
match进行搜索的时候,会先进行分词拆分,拆完后,再来匹配
match_phrase
称为短语搜索,要求所有的分词必须同时出现在文档中,同时位置必须紧邻一致
————————————————
版权声明:本文为CSDN博主「转身那一瞬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29323645/article/details/110430587

作者:缘尤会
链接:https://www.jianshu.com/p/615f1cf8fcfe
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
4.golang实现es的查询语句
golang调用包:https://github.com/olivere/elastic 因为我的es版本是7.2,所以应使用版本7
文档:https://godoc.org/github.com/olivere/elastic
ES官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/index.htm
代码实现

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "strings"
    "github.com/olivere/elastic/v7"
)

//传入参数
type listParam struct{
    page int
    size int
    ip string
    startTime int64
    endTime int64
    level string
    hostname string
}

//返回查询结果
type listRtn struct{
    total int64
    logs []log
}
type log struct{
    id string
    Ip string `json:"ip"`
    Timestamp int64 `json:"timestamp`
    Level string `json:"level"`
    Hostname string `json:"hostname"`
}

func main(){
    //传入参数
    var listPostParam=listParam{
        page:0,
        size:10,
        ip:"192.*",
        startTime:1605139523095,
        endTime:1605337534872,
        level:"INFO",
        hostname:"HF-DC",
    }

    //连接es
    client, err := elastic.NewClient(elastic.SetURL("http://127.0.0.1:9200/"),elastic.SetBasicAuth("elastic", "elastic-pwd"))
    if err != nil {
        panic(err)
    }

    //es查询
    var res *elastic.SearchResult
    indices:="log"
    boolQ := elastic.NewBoolQuery()
    if len(strings.TrimSpace(listPostParam.level))>0{
        boolQ.Filter(elastic.NewTermQuery("level", listPostParam.level))//level需准确匹配
    }

    if listPostParam.endTime>0 && listPostParam.startTime <= 0{//日期区间查询
        boolQ.Filter(elastic.NewRangeQuery("timestamp").Lte(listPostParam.endTime))
    }else if listPostParam.endTime<=0 && listPostParam.startTime > 0{
        boolQ.Filter(elastic.NewRangeQuery("timestamp").Gte(listPostParam.startTime))
    }else if listPostParam.endTime > 0 && listPostParam.startTime > 0{
        boolQ.Filter(elastic.NewRangeQuery("timestamp").Lte(listPostParam.endTime).Gte(listPostParam.startTime))
    }
    //注意:ip和hostname都需要实现模糊查询,ip通过wildcard实现,hostname通过match实现
    // match查询不一定完全符合,这里只是提供一种思路,比如用户填入内容为HF-DC-OP,同样会查出记录HF-DC-FR-001,这个就需要考虑分词了
    /*
    GET log/_analyze
    {
      "field": "hostname",
      "text":  "HF-DC-OP"
    }
    结果:
    {
      "tokens" : [
        {
          "token" : "hf",
          "start_offset" : 0,
          "end_offset" : 2,
          "type" : "<ALPHANUM>",
          "position" : 0
        },
        {
          "token" : "dc",
          "start_offset" : 3,
          "end_offset" : 5,
          "type" : "<ALPHANUM>",
          "position" : 1
        },
        {
          "token" : "op",
          "start_offset" : 6,
          "end_offset" : 8,
          "type" : "<ALPHANUM>",
          "position" : 2
        }
      ]
    }
     */
    if len(strings.TrimSpace(listPostParam.ip))>0{
        boolQ.Filter(elastic.NewWildcardQuery("ip.keyword",fmt.Sprintf("*%s*",listPostParam.ip)))//ip模糊查询
    }
    if len(strings.TrimSpace(listPostParam.hostname))>0{
        boolQ.Filter(elastic.NewMatchQuery("hostname",listPostParam.hostname).Operator("or"))//hostname模糊查询,试着将or调整为and看看结果
    }
    res, err = client.Search(indices).
        Query(boolQ).
        Sort("timestamp",false).
        From(listPostParam.page*listPostParam.size).
        Size(listPostParam.size).
        Do(context.Background()) //分页查询
    if err!=nil{
        panic(err)
    }

    //es查询结果处理:不清楚怎么处理结果,可以参考第三步的查询结果,是相互对应的
    var listRtn listRtn
    if res!=nil && res.Hits.TotalHits.Value > 0 {
        listRtn.total = res.Hits.TotalHits.Value
        for _, hit := range res.Hits.Hits {
            var log log
            err=json.Unmarshal(hit.Source,&log)
            if err !=nil{
                fmt.Println(err.Error())
                continue
            }
            log.id = hit.Id
            listRtn.logs = append(listRtn.logs, log)
        }
    }else{
        listRtn.total = 0
    }
    fmt.Printf("%v",listRtn)
}

2.2 JavaAPI操作

(1)创建索引

@Test
public void createIndex_blog1() {
//1 创建索引
client.admin().indices().prepareCreate(“blog3”).get();

//2 关闭连接
client.close();

}
(2)创建mapping
//IK分词器
@Test
public void createMapping_ik() throws Exception {
// 1设置mapping
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().startObject(“article”)
.startObject(“properties”).startObject(“id”).field(“type”, “text”).field(“store”, “true”)
.field(“analyzer”, “ik_smart”).endObject().startObject(“title”).field(“type”, “text”)
.field(“store”, “false”).field(“analyzer”, “ik_smart”).endObject().startObject(“content”)
.field(“type”, “text”).field(“store”, “true”).field(“analyzer”, “ik_smart”).endObject().endObject()
.endObject().endObject();
// 2 添加mapping
PutMappingRequest mapping = Requests.putMappingRequest(“blog3”).type(“article”).source(builder);
client.admin().indices().putMapping(mapping).get();
// 3 关闭资源
client.close();

}
(3)插入数据
// 创建文档,以map形式
@Test
public void createDocumentByMap_forik1() {
HashMap<String, String> map = new HashMap<String, String>();
map.put(“id”, “2”);
map.put(“title”, “Lucene”);
map.put(“content”, “它提供了一个分布式的web接口”);
IndexResponse response = client.prepareIndex(“blog3”, “article”, “3”).setSource(map).execute().actionGet();
// 打印返回的结果
System.out.println(“结果:” + response.getResult());
System.out.println(“id:” + response.getId());
System.out.println(“index:” + response.getIndex());
System.out.println(“type:” + response.getType());
System.out.println(“版本:” + response.getVersion());

// 关闭资源
client.close();

}
(4)词条查询
// 词条查询
@Test
public void queryTerm_forik() {
// 分析结果:因为是默认被standard
// analyzer分词器分词,大写字母全部转为了小写字母,并存入了倒排索引以供搜索。term是确切查询, 必须要匹配到大写的Name。
SearchResponse response = client.prepareSearch(“blog3”).setTypes(“article”)
.setQuery(QueryBuilders.termQuery(“content”, “分布式”)).get();
// 获取查询命中结果
SearchHits hits = response.getHits();
System.out.println(“结果条数:” + hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭资源
client.close();
}
(5)查看结果

扩展:
Store 的解释:
使用 elasticsearch 时碰上了很迷惑的地方,我看官方文档说 store 默认是 no ,我想当然的理解为也就是说这个 field 是不会 store 的,但是查询的时候也能查询出来,经过查找资料了解到原来 store 的意思是,是否在 source 之外在独立存储一份,这里要说一下 _source 这是源文档,当你索引数据的时候, elasticsearch 会保存一份源文档到 _source ,如果文档的某一字段设置了 store 为 yes (默认为 no),这时候会在 _source 存储之外再为这个字段独立进行存储,这么做的目的主要是针对内容比较多的字段,放到 _source 返回的话,因为source 是把所有字段保存为一份文档,命中后读取只需要一次 IO,包含内容特别多的字段会很占带宽影响性能,通常我们也不需要完整的内容返回(可能只关心摘要),这时候就没必要放到 source 里一起返回了(当然也可以在查询时指定返回字段)。
————————————————
版权声明:本文为CSDN博主「故明所以」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin
43520450/article/details/106210961

GoLand 2020

是一款GO语言编程软件,是专为Go语言开发人员搭建的专业编程平台。该平台将编写调试、数据库、数据分析等等集成于一体,为开发者提供了一个良好的编程环境,符合人体工程学标准,开发者只需将所有精力都用在编程上面即可,无需下载配置任何的插件。该软件继承了其对前端语言和框架的支持,为CSS、HTML、JSP、React、TypeScript等等语言提供了丰富的编码帮助,开发者在编写代码段后可以直接在该软件内进行测试,使用该软件对代码进行智能分析,对问题代码进行快速修复,大大增加了开发者的开发效率。在编程数据库的时候,会自动连接到数据库,实时执行命令,为开发者提供浏览功能,也可以将数据导出至word文档中做近一步的调试和更改,非常的方便。这次小编为大家带来的JetBrains GoLand 2020破解版是最新版本的IDE平台,绿色无毒,欢迎有需要的朋友下载使用。

安装教程
1、解压文件包之后双击打开“goland-2020.1.exe”开始安装

2、点击“Next”

3、选择软件要安装的目录,然后点击“Next”

4、勾选创建64位桌面快捷方式,然后点击“Next”

5、点击“Install”

6、等待安装完成

7、勾选启动该软件,然后点击“Finish”

破解教程
1、点击“OK”

2、点击“Skip”

3、勾选“Evaluate for free”,然后点击“Evaluate”

4、将“Crack”文件夹中的“jetbrains-agent-latest.zip”拖入该软件主界面

5、点击“Restart”

6、点击“为GoLand安装”

7、点击“是”

8、接下来我们进行汉化,关闭该软件,将“resources_zh_CN_GoLand_2020_r1.jar”放入该软件的安装根目录即可

JetBrains GoLand环境配置

1、三个环境变量的配置。
GOROOT:Go 安装后的根目录(例如:D:\Program Files\Go),安装过程中会由安装程序自动写入系统环境变量中。go语言自带的类库。
GOBIN:Go 的二进制文件存放目录(%GOPATH%\bin),这里注意。否则后面go install 不会成功
PATH:需要将 %GOBIN% 加在 PATH 变量的最后,方便在命令行下运行。
2、GOPATH : Go 的工作空间(例如:我们的开发目录 f:\works\Golang)。工作空间的概念搞清楚。用户源代码目录。
工作空间是一个目录层次结构,其根目录包含三个子目录:
src:包含 Go 源文件(例如:.go、.c、.h、.s 等)
pkg:包含包对象,编译好的库文件(例如:.a)
bin:包含可执行命令(为了方便,可以把此目录加入到 Windows 的 PATH 变量中,在环境变量 PATH 后追加 %GOPATH%\bin)

JetBrains GoLand使用教程

1、置工作空间
用过 Eclipse 的同学必不陌生 Workspace (工作空间),Go 也有自己的工作空间,建议将 Go 的代码放在一个单独的空间,类似布局如下:

  • workspace
  • bin
  • pkg
  • src
  • github.com
  • user_name
  • project1
  • project2
    然后将该工作空间(workspace 所在目录)设置到 GOPATH 当中。GOPATH 可用于 Go 导入、安装、构建和更新,还会被 Gogland 自动识别。
    注:如果你采用上述说的 GVM 的安装方式,将自动创建一个 Workspace,并配置好 GOPATH 等相关环境变量,这也是 GVM 方便的地方。
    2、设置 Gogland 的 GOROOT
    在 Gogland 中,需要配置当前项目的 GOROOT,用来编译运行 Go 代码。配置起来也非常方便,打开 Settings → Go → GOROOT 设置即可:
    如果你本地安装了多个版本的 Go,也可以在右侧下拉选择相应的版本,这依赖于你本地有多个版本的Go环境了。
    3、设置 Gogland 的 GOPATH
    Gogland 中的 GOPATH 设置功能非常实用和强大,你既可以配置多个全局的 GOPATH (IDE会自动识别环境变量中的 GOPATH,可不勾选),也可以配置多个项目级别的GOPATH,甚至还可以配置多个模块级别的 GOPATH。打开 Settings → Go → GOPATH 设置如下:
    4、建立新的 Go 项目
    这个很简单,在主菜单选择 File → New → Project, 继而弹出 New Project 设置向导:
    此处就需要选择你在上面配置好的 GOROOT,新建的项目会自动关联全局 GOPATH,你还可以参照第四节说是设置你项目的 GOPATH。
    5、导入已有 Go 项目
    如果你本地已有 Go 项目代码,只需在主菜单选择 File → Open,打开你的项目目录即可。
    最新版的 Gogland有一个非常体贴的小功能,会自动匹配你当前设置好的全局 GOROOT。当然,你也可以在设置中更换。
    接下来会开始建立索引(index),第一次建立的时候可能会比较慢,CPU消耗比较大,耗时长短依赖于你工作空间的代码量,但后续用起来就非常快捷了,索引的建立也是增量的。
    注: 但也有一个问题,每次升级 gogland 或者安装更新插件,也会重新建立索引,这个确实不友好,希望 Jetbrains 后续能改善这点。
    6、运行/调试/测试程序
    当你有了一个 Go 项目工程,二话不说,先跑跑看(前提是你要有一个可执行入口,在 main package 下的 main 函数)。
    为了在 Gogland 运行一个 Go 程序,你需要用到 Run Configuration。
    使用方法如下:
    ·在主菜单栏或工具栏打开:Run → Edit Configurations
    ·点击 Edit Configurations,打开 Run/Debug Configuration 对话框
    ·点击 + 号按钮,选择你需要的运行配置,Go 用到的配置类型如下(按使用频率解释):
    ·Go Application:相当于执行 go build 和运行可执行文件命令,该配置会生成可执行文件,也可执行debug
    ·Go Single File:相当于 go run 命令,该配置不会生成可执行文件,不能执行 debug
    ·Go Test:用于运行测试代码,相当于 go test,有三种测试框架可供选择:gotest,gocheck 和 gobench
    ·Go Remote:提供了 Go 的远程调试支持,你只需要设置要远程连接的 Host 和 Port,并且保证你要调试的程序是通过 Delve 启动的
    ·Go App Engine:允许你将程序部署到 Google AppEngine,前提是你有使用 Google 云,并且你的程序模块加载了 Go AppEngine SDK
    ·以上就是 Go 工程在运行/调试/测试过程中会用到的配置类型,特别是前三项,最为常用。

新增功能
【Go模块改进】
1、围棋1.13的环境变量GOPROXY,GOPRIVATE,GOSUMDB,GONOPROXY,和GONOSUMB现在支持。使用Go Modules项目模板配置其默认值。只需单击“ 环境”字段中的“ 浏览”图标即可打开新的“ 环境变量”对话框。
2、代码完成为go,module,require, replace,exclude关键字,依赖关系的名字,并在本地路径替换为可用于go.mod文件。
3、重命名和移动重构也在业务中。当您重命名或移动replace语句引用的目录时,该软件将相应地更改go.mod文件中的路径。
4、现在,您还可以通过“ 项目视图”调用“ 查找用法”,以探索go.mod文件中特定目录的路径。
5、在该软件中,您可以获取缺少的依赖项,并通过删除未使用的依赖项Alt-Enter。
6、最后但并非最不重要的一点是,如果存在本地路径的替换,新版本将在您提交之前显示一条通知,这样您就不会意外提交它们。
【您不需要学习如何使用的代码完成功能】
1、该软件将建议if err != nil { … }您完成错误处理模式。只需if在表达式中输入。
2、只需输入type关键字or struct和,即可更快地定义结构和接口类型interface。
3、格式规则要求时, “ 填充字段”操作会在冒号后面添加空格。它还在复合文字的声明中的语句末尾添加了逗号。
4、现在,当您使用地图时,完成键类型后,代码完成将光标移到右括号后面。
5、对于函数的返回类型,完成功能将提供适合于相应返回值类型的局部变量和零值的建议。
【智能代码完成(⌥⇧空格或Ctrl + Shift +空格)】
1、智能代码完成建议使用指向结构初始化程序的指针。
2、它还建议在断言和类型切换用例中首先使用兼容类型。
3、在类型断言中,它提供分配变量的类型。
4、最后,它提供了表达式中可能的指针的建议列表。
【基本代码完成(⌃空格或Ctrl +空格)】
1、请欢迎在“ 基本代码完成”中发表评论,这使编写文档更加容易!它为当前程序包声明提供名称,并为函数和方法提供参数名称。
2、除此之外,“ 基本代码完成”还将建议文字和转换。
【代码编辑】
1、当编写多值返回函数的签名时,该软件在逗号后面的返回类型周围添加括号。
2、当您在字符串文字中粘贴一些文本时,IDE会转义双引号。
【前往1.14支持】
1、支持重叠接口
Go 1.14增加了对嵌入重叠接口的支持,我们也是如此!当您使用重叠的接口描述类型的不同方面时,该软件不会将重复的方法报告为错误。
2、自动供应商模式
如果模块根目录包含供应商目录,则会在Go 1.14中自动启用供应商模式。对于该软件2020.1版本,我们决定为Go版本1.13和更早版本实现类似的行为。如果模块中存在导入,IDE将自动将导入解析为vendor /文件夹。
【调试器更新】
1、Profiler标签支持
为了帮助您在调试或核心转储分析过程中更轻松地区分goroutine,我们为它们添加了事件探查器标签。
2、宏支持
现在可以使用宏作为参数来运行或调试您的应用程序。在“ 运行/调试配置”对话框中,单击“ 转到工具”或“ 程序参数”字段中的+,以打开新的“ 宏”对话框,其中包含要使用的可用宏的列表。此外,您现在可以将配置文件存储在项目中。选择“ 运行/调试配置”对话框顶部的“ 另存为项目文件”选项。
【后缀完成】
1、该.else 后缀完成模板快速增加的if语句来检查,如果表达式为假。
【快速修复】
1、通过按,可以立即将一个非格式化呼叫更改为一个格式化呼叫Alt+Enter。
2、现在,“ 创建变量快速修复”将显示预期的类型提示,以使其更容易输入正确的值。
【代码检查】
1、此新代码检查警告您有关在非指针接收器上无效调用指针方法的情况,并提供了快速修复。
2、代码检查uintptr到unsafe.Pointer的无效转换。Pointer会警告您有关错误使用uintptr以及unsafe.Pointer将整数转换为指针的信息。
3、检查解组被称为不正确的参数分析,以电话json.Unmarshal 和类似的功能encoding/json,encoding/xml和 encoding/gob包。
4、由值代码检查错误地传递 的锁可帮助您避免意外复制包含锁的值。
【实时模板】
1、我们添加了新模板,以帮助您快速创建声明组。这些措施包括 consts,vars,types,和imports。当您使用这些模板之一时,GoLand将在声明名称周围添加花括号。
2、fori模板为经典的for循环插入样板代码。
【重构】
1、该提取方法重构保持父函数和方法参数的原始顺序。
2、现在,“ 重命名”重构会自动检测到声明的重命名。这意味着当您手动重命名声明时,IDE将显示一个装订线图标,用于重命名其所有用法。
【导航】
现在,导航到实现(⌥⌘B在macOS和Ctrl+Alt+BWindows / Linux上)和导航到声明或用法(⌘B在macOS和Ctrl+BWindows / Linux上)现在首先显示当前项目的结果。
【VCS改进】
1、新提交工具窗口
现在,新的提交工具窗口包含“ 本地更改”和“ 货架”选项卡。该工具窗口涵盖了所有与提交有关的任务,例如检查差异,选择要提交的文件和块以及输入提交消息。提交是位于屏幕左侧的垂直工具窗口,为整个编辑器显示差异提供了空间。
2、改进的分支弹出
“ 分支”弹出窗口已通过多种方式进行了重新设计:
(1)我们添加了一个明确的搜索字段,使您可以查找现有的远程和本地分支。
(2)现在,您可以使用“ 刷新”按钮来更新现有的远程分支。
(3)传入(蓝色)和传出(绿色)提交指示器已添加到状态栏中。
3、从此处对话框交互式地变基
我们已经从此处实质性地重新设计了Interactive Rebase。这是一个对话框,允许您编辑,合并和删除以前的提交,以使提交历史更加线性和可理解。
【数据库更新】
1、使用运行配置运行脚本文件和代码片段。这样,您可以在启动之前一次运行多个文件,对其进行重新排序,添加新文件以及运行其他程序或配置。
2、现在,您可以在代码编辑器中查看结果。默认情况下禁用此选项。要打开它,请转到“设置/首选项” | 数据库| 一般| 在编辑器中显示输出结果。
3、创建SSH隧道的配置,并在许多数据源甚至项目中使用它。
4、我们添加了将数据导出到Excel文件的功能。
5、另外,您可以在提取器下拉列表中选择首选数据格式。
【Web开发】
1、JavaScript和TypeScript的新智能意图和检查
使用新的智能意图和检查(Alt+Enter)可以节省编码时的时间!例如,您现在可以快速将现有代码转换为可选的链接和/或无效合并,这是最新版本的JavaScript和TypeScript中引入的语法。
2、更有用的快速文档
对于JavaScript和TypeScript,“ 文档”弹出窗口现在显示更多有用的信息,包括有关符号类型和可见性以及该符号定义位置的详细信息。
【更多变化】
1、etBrains Mono是JetBrains的新字体,默认情况下可用。要了解有关字体的更多信息,请访问此页面。
2、Grazie是一个插件,它为您在IDE中编写的文本提供智能的拼写和语法检查,默认情况下已捆绑。
3、新的LightEdit Mode允许您在文本编辑器中打开文件,而无需创建或加载项目。要试用此新功能,首先需要从“ 工具” |“命令行”创建命令行启动器。创建命令行启动,如描述 在这里(如果你使用的工具箱应用程序,这些步骤会略有不同)。有关如何打开文件,比较/合并文件甚至运行代码检查的详细说明,请参阅此Web帮助部分。
4、我们添加了新的Zen Mode,它消除了可能的干扰,并帮助您完全专注于代码。本质上,此模式结合了无干扰模式和全屏模式。要启用它,请转到查看| 外观| 输入Zen Mod,或从“ 快速切换方案”弹出窗口中选择它(Ctrl +`|查看模式|进入Zen Mode)。
5、外部文档现在指向https://pkg.go.dev而不是https://godoc.org。
6、我们恢复了默认配色方案,尽管有了新名称Classic Light。

软件特色
1、编码辅助功能
IDE会分析你的代码,然后在符号之间寻找连接。提供代码提示,快速导航,灵活的错误分析能力以及格式化和重构功能。
2、符合人体工程学的设计
强大的静态代码分析能力和符合人体工程学的设计,使开发者不仅仅是在工作,更是一种愉快的编程体验。
3、工具的集成
关键任务工具,例如代码覆盖工具,功能齐全的调试器和版本控制都集成在一起,而不会有一些随意安装的插件。
4、IntelliJ插件生态系统
除了丰富的内置工具,你如果需要任何东西,在IntelliJ插件生态系统中都可以找到。
xkcd
D:\gowork\pkg\mod\github.com\elastic\go-elasticsearch\v8@v8.0.0-20211021114623-d823a44f1eb7_examples>cd xkcdsearch

D:\gowork\pkg\mod\github.com\elastic\go-elasticsearch\v8@v8.0.0-20211021114623-d823a44f1eb7_examples\xkcdsearch>go run cmd/xkcd/main.go
go: downloading github.com/rs/zerolog v1.11.0
go: downloading golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85
go: downloading github.com/spf13/cobra v0.0.3
go: downloading github.com/inconshreveable/mousetrap v1.0.0
go: downloading golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35
go: updates to go.mod needed; to update it:
go mod tidy

D:\gowork\pkg\mod\github.com\elastic\go-elasticsearch\v8@v8.0.0-20211021114623-d823a44f1eb7_examples\xkcdsearch>go mod tidy

D:\gowork\pkg\mod\github.com\elastic\go-elasticsearch\v8@v8.0.0-20211021114623-d823a44f1eb7_examples\xkcdsearch>go run cmd/xkcd/main.go
xkcd allows you to index and search xkcd.com

Usage:
xkcd [command]

Available Commands:
help Help about any command
index Index xkcd.com into Elasticsearch
search Search xkcd.com
server Launch a web interface

Flags:
-h, –help help for xkcd
-i, –index string Index name (default “xkcd”)

Use “xkcd [command] –help” for more information about a command.

D:\gowork\pkg\mod\github.com\elastic\go-elasticsearch\v8@v8.0.0-20211021114623-d823a44f1eb7_examples\xkcdsearch>go run cmd/xkcd/main.go index

[2m8:54PM[0m [32mINF[0m Starting the crawl with 25 workers at <https://xkcd.com/info.0.json>
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2532 [2mtitle=[0m"Censored Vaccine Card"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2528 [2mtitle=[0m"Flag Map Sabotage"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2524 [2mtitle=[0m"Comet Visitor"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2509 [2mtitle=[0m"Useful Geometry Formulas"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2519 [2mtitle=[0m"Sloped Border"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2512 [2mtitle=[0mRevelation
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2513 [2mtitle=[0m"Saturn Hexagon"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2516 [2mtitle=[0m"Hubble Tension"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2514 [2mtitle=[0m"Lab Equipment"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2521 [2mtitle=[0mToothpaste
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2517 [2mtitle=[0m"Rover Replies"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2511 [2mtitle=[0m"Recreate the Conditions"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2507 [2mtitle=[0mUSV-C
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2522 [2mtitle=[0m"Two-Factor Security Key"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2527 [2mtitle=[0m"New Nobel Prizes"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2510 [2mtitle=[0m"Modern Tools"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2529 [2mtitle=[0m"Unsolved Math Problems"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2526 [2mtitle=[0m"TSP vs TBSP"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2531 [2mtitle=[0m"Dark Arts"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2530 [2mtitle=[0m"Clinical Trials"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2503 [2mtitle=[0m"Memo Spike Connector"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2504 [2mtitle=[0m"Fissile Raspberry Isotopes"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2501 [2mtitle=[0m"Average Familiarity"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2508 [2mtitle=[0m"Circumappendiceal Somectomy"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2500 [2mtitle=[0m"Global Temperature Over My Lifetime"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2523 [2mtitle=[0mEndangered
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2505 [2mtitle=[0m"News Story Reaction"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2493 [2mtitle=[0m"Dual USB-C"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2518 [2mtitle=[0m"Lumpers and Splitters"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2520 [2mtitle=[0mSymbols
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2506 [2mtitle=[0mProjecting
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2515 [2mtitle=[0m"Vaccine Research"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2497 [2mtitle=[0m"Logic Gates"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2525 [2mtitle=[0m"Air Travel Packing List"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2499 [2mtitle=[0m"Abandonment Function"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2485 [2mtitle=[0m"Nightmare Code"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2498 [2mtitle=[0m"Forest Walk"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2502 [2mtitle=[0m"Every Data Table"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2484 [2mtitle=[0mH-alpha
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2496 [2mtitle=[0m"Mine Captcha"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2483 [2mtitle=[0m"Linked List Interview Problem"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2492 [2mtitle=[0m"Commonly Mispronounced Equations"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2488 [2mtitle=[0m"Board Game Argument: Legacy"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2480 [2mtitle=[0m"No, The Other One"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2490 [2mtitle=[0m"Pre-Pandemic Ketchup"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2491 [2mtitle=[0m"Immune Factory"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2489 [2mtitle=[0m"Bad Map Projection: The Greenland Special"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2479 [2mtitle=[0mHouseguests
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2486 [2mtitle=[0m"Board Game Party Schedule"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2487 [2mtitle=[0m"Danger Mnemonic"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2495 [2mtitle=[0m"Universal Seat Belt"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2471 [2mtitle=[0m"Hippo Attacks"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2469 [2mtitle=[0m"Astronomy Status Board"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2482 [2mtitle=[0m"Indoor Socializing"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2468 [2mtitle=[0mInheritance
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2481 [2mtitle=[0m"1991 and 2021"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2476 [2mtitle=[0m"Base Rate"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2494 [2mtitle=[0m"Flawed Data"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2464 [2mtitle=[0m"Muller's Ratchet"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2466 [2mtitle=[0m"In Your Classroom"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2478 [2mtitle=[0m"Alien Visitors 2"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2477 [2mtitle=[0m"Alien Visitors"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2461 [2mtitle=[0m"90's Kid Space Program"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2475 [2mtitle=[0m"Health Drink"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2467 [2mtitle=[0m"Wikipedia Caltrops"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2460 [2mtitle=[0mVaccinated
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2474 [2mtitle=[0m"First Time Since Early 2020"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2472 [2mtitle=[0m"Fuzzy Blob"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2456 [2mtitle=[0m"Types of Scientific Paper"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2463 [2mtitle=[0mAstrophotography
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2473 [2mtitle=[0m"Product Launch"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2454 [2mtitle=[0m"Fully Vaccinated"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2462 [2mtitle=[0m"NASA Award"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2470 [2mtitle=[0m"Next Slide Please"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2452 [2mtitle=[0m"Aviation Firsts"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2459 [2mtitle=[0m"March 2020"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2465 [2mtitle=[0m"Dimensional Chess"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2447 [2mtitle=[0m"Hammer Incident"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2455 [2mtitle=[0m"Virus Consulting"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2457 [2mtitle=[0m"After the Pandemic"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2449 [2mtitle=[0m"ISS Vaccine"
[2m8:54PM[0m [32mINF[0m Stored doc [2mID=[0m2438 [2mtitle=[0mSiri

[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m20 [2mtitle=[0mFerret
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m19 [2mtitle=[0m"George Clinton"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m17 [2mtitle=[0m"What If"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m15 [2mtitle=[0m"Just Alerting You"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m14 [2mtitle=[0mCopyright
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m16 [2mtitle=[0m"Monty Python -- Enough"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m13 [2mtitle=[0mCanyon
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m12 [2mtitle=[0mPoisson
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m10 [2mtitle=[0m"Pi Equals"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m38 [2mtitle=[0m"Apple Jacks"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m11 [2mtitle=[0m"Barrel - Part 2"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m9 [2mtitle=[0m"Serenity is coming out tomorrow"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m8 [2mtitle=[0m"Red spiders"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m7 [2mtitle=[0m"Girl sleeping (Sketch -- 11th grade Spanish class)"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m6 [2mtitle=[0mIrony
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m5 [2mtitle=[0m"Blown apart"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m4 [2mtitle=[0m"Landscape (sketch)"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m3 [2mtitle=[0m"Island (sketch)"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m2 [2mtitle=[0m"Petit Trees (sketch)"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m1 [2mtitle=[0m"Barrel - Part 1"
[2m8:55PM[0m [32mINF[0m Stored doc [2mID=[0m18 [2mtitle=[0mSnapple

D:\gowork\pkg\mod\github.com\elastic\go-elasticsearch\v8@v8.0.0-20211021114623-d823a44f1eb7_examples\xkcdsearch>go run cmd/xkcd/main.go search python
[2m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m
[2m?q=[0m[1mpython[0m
[2m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m
[2m•[0m [1m[30;47mPython[0m[0m [2007-12-05] https://xkcd.com/353/
[2mAlt: [0mI wrote 20 short programs in [30;47mPython[0m yesterday. It was wonderful. Perl, I’m leaving you.
[2mTranscript: [0mGuy 2: [30;47mPython[0m! … But i think this is the [30;47mpython[0m … wrote 20 short programs in [30;47mPython[0m
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1m[30;47mPython[0m Environment[0m [2018-04-30] https://xkcd.com/1987/
[2mAlt: [0mThe [30;47mPython[0m environmental protection agency wants to seal it in a cement chamber, with pictorial messages to future civilizations warning them about the danger of using sudo to install random [30;47mPython[0m packages.
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mMonty [30;47mPython[0m – Enough[0m [2006-01-01] https://xkcd.com/16/
[2mTranscript: [0mformat]] Honor Monty [30;47mPython[0m
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mTwitter Bot[0m [2016-02-22] https://xkcd.com/1646/
[2mAlt: [0m[30;47mPYTHON[0m FLAG ENABLE THREE LAWS
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mImportant Life Lesson[0m [2008-03-24] https://xkcd.com/400/
[2mAlt: [0mI didn’t even know I had the Monty [30;47mPython[0m ‘Lumberjack’ song.
[2mTranscript: [0meven know I had the Monty [30;47mPython[0m
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mModern Tools[0m [2021-09-01] https://xkcd.com/2510/
[2mAlt: [0mI tried to train an AI to repair my [30;47mPython[0m environment but it kept giving up and deleting itself.
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mFamous Duos[0m [2016-02-26] https://xkcd.com/1648/
[2mTranscript: [0mwrite a twitter bot Search: [30;47mpython[0m … australia {{Title text: [30;47mPYTHON[0m
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mSigil Cycle[0m [2013-12-20] https://xkcd.com/1306/
[2mTranscript: [0mthe next trough is marked ‘[30;47mPython[0m
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mReassuring[0m [2013-09-11] https://xkcd.com/1263/
[2mTranscript: [0mWoman: I made a [30;47mPython[0m script
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mNew Pet[0m [2008-04-21] https://xkcd.com/413/
[2mTranscript: [0m[30;47mPython[0m.
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mElectric Skateboard (Double Comic)[0m [2008-04-11] https://xkcd.com/409/
[2mTranscript: [0mIt’s like going from C to [30;47mPython[0m
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1m2008 Christmas Special[0m [2008-12-24] https://xkcd.com/521/
[2mTranscript: [0mGuy: Friggin’ [30;47mPython[0m.
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
[2m•[0m [1mHeight[0m [2008-09-29] https://xkcd.com/482/
[2mTranscript: [0mHelicoptors Man: Woo [30;47mPython[0m
[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m

D:\gowork\pkg\mod\github.com\elastic\go-elasticsearch\v8@v8.0.0-20211021114623-d823a44f1eb7_examples\xkcdsearch>go run cmd/xkcd/main.go server
[2m8:56PM[0m [32mINF[0m Starting server at localhost:8000
[2m8:56PM[0m [32mINF[0m GET /search.json?q=&a=
[2m8:56PM[0m [32mINF[0m GET /search.json?q=&a=1630022400000,519
[2m8:56PM[0m [32mINF[0m GET /search.json?q=&a=1625011200000,446
[2m8:56PM[0m [32mINF[0m GET /search.json?q=&a=1620000000000,494
[2m8:56PM[0m [32mINF[0m GET /search.json?q=&a=1614902400000,278
[2m8:56PM[0m [32mINF[0m GET /search.json?q=&a=1609891200000,302
[2m8:56PM[0m [32mINF[0m GET /search.json?q=&a=1604880000000,51
[2m8:57PM[0m [32mINF[0m GET /search.json?q=python&a=

docker pull jbarlow83/ocrmypdf
Using default tag: latest
latest: Pulling from jbarlow83/ocrmypdf
docker tag jbarlow83/ocrmypdf ocrmypdf
ocrmypdf -l chi_sim –output-type pdf 正则表达式必知必会(修订版).pdf 正则表达式必知必会(修订版)-ocr.pdf –force-ocr
C:\Users\Administrator>docker run -i –rm jbarlow83/ocrmypdf -l chi_sim - -<mm.pdf>output.pdf
reading file from standard input
Start processing 4 pages concurrently
5 [tesseract] lots of diacritics - possibly poor OCR
8 [tesseract] lots of diacritics - possibly poor OCR
10 [tesseract] lots of diacritics - possibly poor OCR
12 [tesseract] lots of diacritics - possibly poor OCR
13 [tesseract] lots of diacritics - possibly poor OCR
18 [tesseract] lots of diacritics - possibly poor OCR
19 [tesseract] lots of diacritics - possibly poor OCR
40 [tesseract] lots of diacritics - possibly poor OCR
43 [tesseract] lots of diacritics - possibly poor OCR
56 [tesseract] lots of diacritics - possibly poor OCR
Postprocessing…
Some input metadata could not be copied because it is not permitted in PDF/A. You may wish to examine the output PDF’s XMP metadata.
Optimize ratio: 1.23 savings: 18.5%
Output sent to stdout

https://github.com/tesseract-ocr/tesseract/blob/main/doc/tesseract.1.asc#languages

For Tesseract 4, tessdata_fast includes traineddata files for the following languages:

afr (Afrikaans), amh (Amharic), ara (Arabic), asm (Assamese), aze (Azerbaijani), aze_cyrl (Azerbaijani - Cyrilic), bel (Belarusian), ben (Bengali), bod (Tibetan), bos (Bosnian), bre (Breton), bul (Bulgarian), cat (Catalan; Valencian), ceb (Cebuano), ces (Czech), chi_sim (Chinese simplified), chi_tra (Chinese traditional), chr (Cherokee), cos (Corsican), cym (Welsh), dan (Danish), deu (German), div (Dhivehi), dzo (Dzongkha), ell (Greek, Modern, 1453-), eng (English), enm (English, Middle, 1100-1500), epo (Esperanto), equ (Math / equation detection module), est (Estonian), eus (Basque), fas (Persian), fao (Faroese), fil (Filipino), fin (Finnish), fra (French), frk (Frankish), frm (French, Middle, ca.1400-1600), fry (West Frisian), gla (Scottish Gaelic), gle (Irish), glg (Galician), grc (Greek, Ancient, to 1453), guj (Gujarati), hat (Haitian; Haitian Creole), heb (Hebrew), hin (Hindi), hrv (Croatian), hun (Hungarian), hye (Armenian), iku (Inuktitut), ind (Indonesian), isl (Icelandic), ita (Italian), ita_old (Italian - Old), jav (Javanese), jpn (Japanese), kan (Kannada), kat (Georgian), kat_old (Georgian - Old), kaz (Kazakh), khm (Central Khmer), kir (Kirghiz; Kyrgyz), kmr (Kurdish Kurmanji), kor (Korean), kor_vert (Korean vertical), lao (Lao), lat (Latin), lav (Latvian), lit (Lithuanian), ltz (Luxembourgish), mal (Malayalam), mar (Marathi), mkd (Macedonian), mlt (Maltese), mon (Mongolian), mri (Maori), msa (Malay), mya (Burmese), nep (Nepali), nld (Dutch; Flemish), nor (Norwegian), oci (Occitan post 1500), ori (Oriya), osd (Orientation and script detection module), pan (Panjabi; Punjabi), pol (Polish), por (Portuguese), pus (Pushto; Pashto), que (Quechua), ron (Romanian; Moldavian; Moldovan), rus (Russian), san (Sanskrit), sin (Sinhala; Sinhalese), slk (Slovak), slv (Slovenian), snd (Sindhi), spa (Spanish; Castilian), spa_old (Spanish; Castilian - Old), sqi (Albanian), srp (Serbian), srp_latn (Serbian - Latin), sun (Sundanese), swa (Swahili), swe (Swedish), syr (Syriac), tam (Tamil), tat (Tatar), tel (Telugu), tgk (Tajik), tha (Thai), tir (Tigrinya), ton (Tonga), tur (Turkish), uig (Uighur; Uyghur), ukr (Ukrainian), urd (Urdu), uzb (Uzbek), uzb_cyrl (Uzbek - Cyrilic), vie (Vietnamese), yid (Yiddish), yor (Yoruba)

Windows server2019

安装jdk

运行tika

D:\tika-server-1.27-bin>java -jar tika-server.jar
11月 13, 2021 1:18:01 上午 org.apache.tika.config.InitializableProblemHandler$3 handleInitializableProblem
警告: J2KImageReader not loaded. JPEG2000 files will not be processed.
See https://pdfbox.apache.org/2.0/dependencies.html#jai-image-io
for optional dependencies.

运行elasticsearch

D:\elasticsearch-7.14.2-windows-x86_64\elasticsearch-7.14.2\bin
修改elasticsearch-7.14.2\config\elasticsearch.yml
加入
http.cors.enabled: true
http.cors.allow-origin: “*”

运行elasticsearch.bat

作者:秦晓川  创建时间:2023-04-08 18:12
最后编辑:秦晓川  更新时间:2024-11-22 18:38