私はここ数か月から 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*"
}
}
}
}
}
このクエリを実行した後、2 つの結果が得られます。1 つはフォロワー: "34,518" & ファン: "510"、2 番目はファン:"34" ですが、結果の 2 番目だけではないはずです。
何か案は?