过去几个月我一直在使用 ElasticSearch,但是当我必须传递一个复杂的查询时仍然觉得它很复杂。
我想运行必须搜索多个“类型”的查询,并且每种类型都必须使用自己的“过滤器”进行搜索,但需要组合“搜索结果”
例如:
我需要搜索我的朋友的“用户类型”文档,同时我必须根据提供的关键字搜索我喜欢的“对象类型”文档。
或者
同时具有“AND”和“NOT”子句的查询
示例查询:
$options['query'] = array(
'query' => array(
'filtered' => array(
'query' => array(
'query_string' => array(
'default_field' => 'name',
'query' => $this->search_term . '*',
),
),
'filter' => array(
'and' => array(
array(
'term' => array(
'access_id' => 2,
),
),
),
'not' => array(
array(
'term' => array(
'follower' => 32,
),
),
array(
'term' => array(
'fan' => 36,
),
),
),
),
),
),
);
因为此查询旨在搜索 access_id = 2 的用户,但不能有 id 32 的追随者和 id 36 的粉丝
但这不起作用..
编辑:修改后的查询
{
"query": {
"filtered": {
"filter": {
"and": [
{
"not": {
"filter": {
"and": [
{
"query": {
"query_string": {
"default_field": "fan",
"query": "*510*"
}
}
},
{
"query": {
"query_string": {
"default_field": "follower",
"query": "*510*"
}
}
}
]
}
}
},
{
"term": {
"access_id": 2
}
}
]
},
"query": {
"field": {
"name": "xyz*"
}
}
}
}
}
现在运行此查询后,我得到了两个结果,一个是关注者:“34,518”和风扇:“510”,第二个是风扇:“34”,但它不应该只是结果中的第二个。
有任何想法吗?