springboot与检索

ElasticSearch

安装

docker pull elasticsearch

启动

ElasticSearch默认需要使用2G的内存使用JAVA命令指定为256M

1
2
3
4
5
6
vim /etc/sysctl.conf
vm.max_map_count = 262144

sysctl -p #使修改立即生效
systemctl restart docker
重新启动镜像

服务端口为9200,集群通信接口为9300

如果报如下错误在启动命令上再加上 -e “discovery.type=single-node”

1
2
3
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
[2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

docker run -d -e ES_JAVA_POTS=”-Xms256m -Xmx256m” -e “discovery.type=single-node” -p 9200:9200 -p 9300:9300 –name ES01 d7052f192d01

直至访问9200端口出现如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name" : "5b93976a3cf1",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "iWfYXTwoRrmkwZpQeOjIsA",
"version" : {
"number" : "7.3.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "1c1faf1",
"build_date" : "2019-09-06T14:40:30.409026Z",
"build_snapshot" : false,
"lucene_version" : "8.1.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

中文文档

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_search_lite.html

Postman查询ES报错(解决)

使用Postman进行发送GET请求ES查询

http://xxxxxxxxx:9200/index/type/_search

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "Unknown key for a VALUE_STRING in [first_name].",
"line": 2,
"col": 21
}
],
"type": "parsing_exception",
"reason": "Unknown key for a VALUE_STRING in [first_name].",
"line": 2,
"col": 21
},
"status": 400
}

可以看到无法解析第一个字符串,即_search无法解析

原因是Postman在会将特殊字符转义,所以_search换成%5Fsearch即可。

其他特殊转义字符参考

Springboot整合

引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

使用

Springboot默认支持Jest以及SpringData ElasticSearch

  • Jest

    • 增加索引
    1
    2
    3
    4
    5
    6
    7
    8
    Book book = new Book("sun", 1);
    //给Es中保存一个索引
    Index sunIndex = new Index.Builder(book).index("sunindex").type("book").build();
    try {
    jestClient.execute(sunIndex);
    } catch (IOException e) {
    e.printStackTrace();
    }

    这里需要给实体类上某个属性标注为ID

    1
    2
    3
    4
    5
    public class Book {
    private String name;

    @JestId
    private Integer id;
    • 搜索索引
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void query() throws IOException {
    String query="{\n" +
    "\t\"query\":{\n" +
    "\t\t\"match\":{\n" +
    "\t\t\t\"name\":\"sun1\"\n" +
    "\t\t}\n" +
    "\t}\n" +
    "}";
    Search build = new Search.Builder(query).addIndex("sunindex").addType("book").build();
    SearchResult execute = jestClient.execute(build);

    System.out.println(execute.getFirstHit(Book.class));

    }

附录

特殊字符转义

转自 https://www.cnblogs.com/rockdean/articles/2373337.html

backspace %08
tab %09
linefeed %0A
creturn %0D
space %20
! %21
“ %22

%23

$ %24
% %25
& %26
‘ %27
( %28
) %29

%2A

%2B
, %2C

%2D
. %2E
/ %2F
0 %30
1 %31
2 %32
3 %33
4 %34
5 %35
6 %36
7 %37
8 %38
9 %39
: %3A
; %3B
< %3C
= %3D

%3E
? %3F
@ %40
A %41
B %42
C %43
D %44
E %45
F %46
G %47
H %48
I %49
J %4A
K %4B
L %4C
M %4D
N %4E
O %4F
P %50
Q %51
R %52
S %53
T %54
U %55
V %56
W %57
X %58
Y %59
Z %5A
[ %5B
\ %5C
] %5D
^ %5E
_ %5F
%60 a %61 b %62 c %63 d %64 e %65 f %66 g %67 h %68 i %69 j %6A k %6B l %6C m %6D n %6E o %6F p %70 q %71 r %72 s %73 t %74 u %75 v %76 w %77 x %78 y %79 z %7A { %7B | %7C } %7D ~ %7E ¢ %A2 £ %A3 ¥ %A5 | %A6 § %A7 « %AB ¬ %AC ¯ %AD º %B0 ± %B1 ª %B2 , %B4 µ %B5 » %BB ¼ %BC ½ %BD ¿ %BF À %C0 Á %C1 Â %C2 Ã %C3 Ä %C4 Å %C5 Æ %C6 S %53 T %54 U %55 V %56 W %57 X %58 Y %59 Z %5A [ %5B \ %5C ] %5D ^ %5E _ %5F %60
a %61
b %62
c %63
d %64
e %65
f %66
g %67
h %68
i %69
j %6A
k %6B
l %6C
m %6D
n %6E
o %6F
p %70
q %71
r %72
s %73
t %74
u %75
v %76
w %77
x %78
y %79
z %7A
{ %7B
| %7C
} %7D
~ %7E
¢ %A2
£ %A3
¥ %A5
| %A6
§ %A7
« %AB
¬ %AC
¯ %AD
º %B0
± %B1
ª %B2
, %B4
µ %B5
» %BB
¼ %BC
½ %BD
¿ %BF
À %C0
Á %C1
 %C2
à %C3
Ä %C4
Å %C5
Æ %C6