我的主要目的是编写一个必须搜索searchtext的查询,如果应用了加载端口或卸载端口的任何过滤器,那么它必须从搜索文本的结果中过滤掉它。
如果没有应用过滤器,那么它应该继续进行。
例如:我搜索牛仔裤,如果我使用过滤器,那么装货港必须是印度,其卸货港必须是美国。
我试着写这份报告但是没有给出适当的结果。
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"query_string": {
"query": searchText
}
}
]
}
},
{
"terms": {
"loadingPort":loadingPortArray
}
},
{
"terms": {
"unloadingPort":unloadingPortArray
}
}
]
}
}
}
答案 0 :(得分:0)
您的问题是您将所有quires \ filters包装在should
中,这意味着所有语句都由OR
逻辑组合在一起。如果您需要AND
,则需要在must
内包装语句。
顺便说一下,您没有使用过滤器,而是使用term
查询。在elasticsearch中查询和过滤器之间存在巨大差异。要使用过滤器,您需要使用带有过滤器的bool
查询。
{
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"query_string": {
"query": searchText
}
}
]
}
}
],
"filter": {
"bool": {
"must": [
{
"terms": {
"loadingPort":loadingPortArray
}
},
{
"terms": {
"unloadingPort":loadingPortArray
}
}
]
}
}
}
}
}