Поиск с оператором "И" в пакете PHP Elastic search
Я пытаюсь научиться Elastic Search
с помощью пакета php composer. У меня естьindex
с именем media_data
который содержит nits_account
, nits_url
, session_id
, timestamp
поля. Я хочу иметь фильтры на основе указанных выше полей, и они должны быть вand
оператор. мой текущий код запроса:
$items = $this->elasticsearch->search([
'index' => $index_name,
'body' => [
'query' => [
'filtered' => [
'filter' => [
'and' => [
['match' => ['nits_account' => 'xyzABCD2190-aldsj']], //API Key
['match' => ['nits_url' => 'google.com']],
]
]
]
]
]
]);
Мой вопрос:
Я не могу получить данные. Но если я сделаю код ниже:
$items = $this->elasticsearch->search([ 'index' => $index_name, 'body' => [ 'query' => [ 'bool' => [ 'should' => [ ['match' => ['nits_account' => $account] ], ['match' => ['nits_url' => $domain] ], ], ], ] ] ]);
Я получаю ценности в or
операторов, но необходимо иметь and
работа в нем.
- Как я могу использовать разные поисковые операции с соответствующими полями, я имею в виду, что хочу иметь
nits_account
поле для точного совпадения, я хочу иметьnits_url
с операциями like/wildcard отметка времени должна быть сопоставимой (больше / меньше / между двумя датами).
1 ответ
Решение
Попробуй это:
$items = $this->elasticsearch->search([
'index' => $index_name,
'body' => [
'query' => [
'bool' => [
'must' => [
['match' => ['nits_account' => $account] ],
['match' => ['nits_url' => $domain] ]
],
],
]
]
]);
Вы должны использовать must
ключевое слово, а не should
ключевое слово. must
действует как операция И, аshould
действует как операция ИЛИ.
если вам нужно использовать условное соответствие, используйте что-то вроде этого:
"query": {
"bool": {
"must": [
{
"range": {
"nits_url": {
"gte": 1000,
"lte": 10000
}
}
},
{
"match": {
"nits_account": "$account"
}
}
]
}
}