您的位置:首页 > 编程语言 > Go语言

实战 | Elasticsearch实现类Google高级检索

2017-12-21 14:04 302 查看
少废话,说正事。


一、高级检索的功能点

通过高级搜索配置搜索项,能更准确的过滤掉不相干信息,获取最想要的检索信息。 

以Google搜索为例(截取核心片段): 




二、高级检索拆分


1、包含以下全部的关键词:

需要分词处理; 

若需要指定字段,则使用matchQuery实现; 

若无需指定字段的全文检索,则使用queryStringQuery实现;


2、包含以下的完整关键词 :

需要完整匹配字符,使用wildcardQuery结合”*”实现;


3、包含以下任意一个关键词 :

空格分隔每个关键词,需要将多个词空格拆分,然后对每个关键词通过should结合wildcardQuery遍历实现;


4、不包括以下关键词 :

包含以下全部关键词的反面, 

若需要指定字段,则使用must_not结合matchQuery实现; 

若无需指定字段,则使用must_not结合queryStringQuery实现;


5、限定要搜索的网页的时间是:

限定搜索的开始和结束时间,通过rangequery实现。


6、关键词位置:

根据关键词位置的不同,采用不同的实现; 

关键词位于title字段:指定title进行检索; 

关键词位于content字段:指定content进行检索; 

关键词位于全部字段:不指定字段进行检索,多使用 queryStringQuery实现。


三、DSL高级检索实现

POST detail_index/_search
{
"from" : 0,
"size" : 10,
"query" : {
"bool" : {
"must" : [
{
"match" : {
"title" : {
"query" : "苹果乔布斯",
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"boost" : 1.0
}
}
},
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*苹果总裁库克*",
"boost" : 1.0
}
}
},
{
"range" : {
"public_time" : {
"from" : "2017-09-07 00:00:00",
"to" : "2017-09-15 23:59:59",
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
}
],
"must_not" : [
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*苹果梨*",
"boost" : 1.0
}
}
}
],
"should" : [
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*苹果手机*",
"boost" : 1.0
}
}
},
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*iphoneX*",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"_source" : {
"includes" : [
"title",
"content"
],
"excludes" : [ ]
},
"highlight" : {
"pre_tags" : [
"<span style=\"color:red\">"
],
"post_tags" : [
"</span>"
],
"fragment_size" : 100,
"number_of_fragments" : 5,
"require_field_match" : true,
"fields" : {
"title" : { }
}
}
}
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

以上DSL对应如下: 




四、小结

Elasticsearch检索中的精确匹配、全文检索分为很多种,需要结合开发需求进行因地制宜的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: