前言
文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…
种一棵树最好的时间是十年前,其次是现在
絮叨
其实这个问题,也算不得是什么大问题,就是不知道的很坑,公司的搜索服务,本来不是我维护的,后面因为人员调动,给我维护了,然后他们用的竟然不是JPA,用的是RestHighLevelClient。这就很尴尬了,没有学过,然后稀里糊涂的用着。
前言 一个新功能的迭代,下面是迭代的原型
其实也很简单就是做一个听课卡的筛选出,可以使用的课程和免费的课程嘛,当时就大概看了看以前的代码,因为es这个也是自己新学的吧,但是以前学的时候用的是JPA,这次项目用的是RestHighLevelClient,然后搞来搞去,搞了很久。
因为,这个文章就是给自己的一个记录,所以也没打算说讲的很详细,就举个例子说明一下吧,具体怎么用es,我会写专门的es系列
问题
如在a=1且b=2的数据中,找出c=1或者d=2的数据
那我可能会这样写,如果你是按照sql的思维的话
{"query": {
"bool": {
"must": [
{"match": {
"a": "1",
"b": "2"
}}
],
"should": [
{"match": {
"c": "1"
},
{"match": {
"d": "2"
}}
]
}}}
这样写的时候should是没有用的,这是新手可能犯的错误之一。 在编写查询条件的时候,不能用口头上的逻辑进行编写,而是要换成数学逻辑才能进行执行(数据库同理)。 如上例,数学逻辑应该是 (a==1&&b==2&&c==1)||(a==1&&b==2&&d==2)(java and c语言版),这样的结构去查询。
解决
{"query": {
"bool": {
"should": [
{"match": {
"a": "1",
"b": "2",
"c": "1"
}}
],
"should": [
{"match": {
"a": "1",
"b": "2",
"d": "2"
}}
]
}}}
或者这样
{
"query": {
"bool": {
"must": [
{"match": {
"a": "1",
"b": "2"
}},
{
"bool": {
"should": [
{"match": {"c": 1}},
{"match": {"d": 2}}
]
}
}
]
}
}
结尾
嗯,记录一下新手经常犯的错误,哈哈博主也是个新手菜鸡。
日常求赞
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是真粉。
创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见
六脉神剑 | 文 【原创】如果本篇博客有任何错误,请批评指教,不胜感激 !