问题描述
我正在使用最新版本的Elastic Search(7.9),并且我试图找到一种以AND的方式进行多项查询的好方法。
基本上我想做的是:
DATE RATE
31DEC2014 0.1600
31DEC2015 0.1600
31DEC2016 0.1600
31DEC2017 0.1600
31DEC2018 0.1700
31DEC2019 0.1770
我目前正在使用term在field1上进行完全匹配的关键字。但是添加第二个字段会给我带来一些麻烦。
select * where field1 === 'word' AND field2 === 'different word'
这是我当前的查询,我尝试使用BOOL。我在以前的版本中遇到了答案,在这里我可能会使用过滤的查询。但是我似乎也无法使它正常工作。
有人可以帮我吗。真是发疯了。
编辑
这是我尝试使用bool /必须使用多个术语的内容。但是即使我知道在这种情况下该查询应该返回数据,我也没有得到结果
{
"query": {
"term": {
"field1": {
"value": "word"
}
}
}
}
解决方法
好吧,有趣的事实。您可以按照我的尝试进行布尔/匹配。您应该记住的是,关键字匹配(这就是我正在使用的关键字)区分大小写。将字段的类型设置为关键字时,ES不会对数据进行任何分析或过滤。
还可以使用带有过滤器的布尔值来获得相同的结果(当您考虑类型时)
{
"query": {
"bool": {
"must":
{
"term": {
"field1": {
"value": "word"
}
}
},"filter":
{
"term": {
"field2": {
"value": "other word"
}
}
}
}
}
}