需要解决的问题:
- 当搜索内容为
工程
时,统计出books
表中clcs
字段为不同值的个数是多少 - 当搜索内容为
工程
时,查找出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中的aggs,他是把类似于['建筑科学','电工技术']、['建筑科学']和['科学']等分开统计的;
问题2must中的match_phrase,短语匹配是要把把含有建筑科学、建筑、科学 类似于 ['建筑科学','电工技术']、['建筑科学']和['科学']都统计出来吧!。
您看一下您问题二的搜索结果没有类似于含有['建筑科学','电工技术']、['科学']这样的数据吗?
希望有所帮助。