我一直在使用最近幾個月的ElasticSearch,但是當我必須傳遞一個複雜的查詢時仍然很複雜。如何將ElasticSearch查詢參數(DSL查詢)用於多種類型?
我想運行,這將有搜索多個「類型」查詢每種類型都有與自己的「過濾器」進行搜索,但需要有組合拳「搜索結果」
例如:
我需要搜索作爲我的朋友的「用戶類型」文檔,同時根據提供的關鍵字搜索我喜歡的「對象類型」文檔。
OR
具有查詢兩者 「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*"
}
}
}
}
}
現在正在運行此查詢後,我得到兩個結果,一個與跟隨:「34518」 &球迷:「510」和第二風扇:「34」,但不是它應該只是結果中的第二個。
任何想法?
「不」過濾器總是在「和」過濾器下,或者只是在這種情況下 –
Hi @DrTech,我剛剛編輯了問題,請檢查。 –
您編輯的問題引入了其他問題。我建議你看看我鏈接到的演示文稿 - 它解釋了術語和文本之間的區別,以及在哪裏使用哪些類型的查詢或過濾器。 – DrTech