需要解决的问题:
1. 当搜索内容为`工程`时,统计出`books`表中`clcs`字段为不同值的个数是多少
2. 当搜索内容为`工程`时,查找出`books`表中`clcs`字段值为`建筑科学`的文档
针对问题1我的语句如下,
```
GET /engineer/books/_search
{
"size":0,
"query":{
"multi_match": {
"query": "工程",
"fields": ["summary","isbn","series","keywords","bindingFormat","standardNo","editor","chiefEditor","publisher","name","clcs","sublibs"]
}
},
"aggs":{
"data":{
"terms": {
"field": "clcs.keyword"
}
}
}
}
```
搜索的结果如下:
统计出的`clcs`字段为`建筑科学`的个数是139个
针对问题2我的解决方案是:
```
GET engineer/books/_search
{
"query":{
"bool":{
"should":{
"multi_match":{
"query":" 工程",
"fields": ["summary","isbn","series","keywords","bindingFormat","standardNo","editor","chiefEditor","publisher","name","clcs","sublibs"],
"type":"phrase"
}
},
"must":{
"match_phrase":{
"clcs":"建筑科学"
}
}
}
},
"_source":["name","isbn","clcs"]
}
```
结果为:
通过`total`字段可以看到,查询出来的文档个数为146,跟之前查询出来的139个相差了,这是为什么呢?
PS: `clcs`字段是一个数组,也就是说clcs字段存在下面的情况`['建筑科学','电工技术']`
1. 当搜索内容为`工程`时,统计出`books`表中`clcs`字段为不同值的个数是多少
2. 当搜索内容为`工程`时,查找出`books`表中`clcs`字段值为`建筑科学`的文档
针对问题1我的语句如下,
```
GET /engineer/books/_search
{
"size":0,
"query":{
"multi_match": {
"query": "工程",
"fields": ["summary","isbn","series","keywords","bindingFormat","standardNo","editor","chiefEditor","publisher","name","clcs","sublibs"]
}
},
"aggs":{
"data":{
"terms": {
"field": "clcs.keyword"
}
}
}
}
```
搜索的结果如下:
统计出的`clcs`字段为`建筑科学`的个数是139个
针对问题2我的解决方案是:
```
GET engineer/books/_search
{
"query":{
"bool":{
"should":{
"multi_match":{
"query":" 工程",
"fields": ["summary","isbn","series","keywords","bindingFormat","standardNo","editor","chiefEditor","publisher","name","clcs","sublibs"],
"type":"phrase"
}
},
"must":{
"match_phrase":{
"clcs":"建筑科学"
}
}
}
},
"_source":["name","isbn","clcs"]
}
```
结果为:
通过`total`字段可以看到,查询出来的文档个数为146,跟之前查询出来的139个相差了,这是为什么呢?
PS: `clcs`字段是一个数组,也就是说clcs字段存在下面的情况`['建筑科学','电工技术']`
1 个回复
strglee
赞同来自: CharlesX
如果要改成 ”工程“也必须配置 可以添加
"minimum_should_match": 1,