query + filter 语句进行筛选

作者 CharlesX | 发布于2018年10月18日 | 阅读数:172

把很多书的对象导入了elasticsearch,主要有如下字段,
var book = {
name: "JavaScript高级编程",
summary:"这是一本很牛逼的书。由同济大学教授编写",
sublibs:["编程","科普","地下空间"]
}
现在要用DSL语句把这本书搜出来,写出了如下的语句:

1.png
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "同济大学",
"fields": [
"summary"
]
}
},
"filter": [
{
"term": {
"sublibs.keyword": "地下空间"
}
}
]
}
},
"_source":["summary"],
"highlight":{
"pre_tags":["<span>"],
"post_tags":["</span>"],
"fields":{
"summary":{}
}
}
}

2.png


但是结果是空的,是哪里写的不对么?
已邀请:

rochy - rochy_he@jointsky

赞同来自:

应该是你 sublibs 字段的映射配置的有问题,你需要设置为 keyword 类型即可,
如果你使用的ES版本为5.X或6.X 你可以试试下面的搜索:
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "同济大学",
"fields": [
"summary"
]
}
},
"filter": [
{
"term": {
"sublibs.keyword": "地下空间"
}
}
]
}
}
}

zqc0512 - andy zhou

赞同来自:

keyword 针对聚合搜索查询的。
 

要回复问题请先登录注册