php - 在 Elasticsearch 查询中组合 OR、AND 和 IN 运算符
问题描述
我对弹性搜索很陌生,我需要准备结合 OR、AND 和 IN 运算符的查询。我想要实现的是在 SQL 中有这样的东西:
SELECT * FROM tableWHERE (field_1 = 'foo' AND field_2 IN(1,2,3) ) OR ('field_1 = 'bar' AND field_2 IN(2, 3, 4) );
我在 PHP 中使用 elastic 并从以下内容开始:
'query' => [
'bool' => [
'should' => [
[
'match' => [
'field_1' => 'foo',
],
],
[
'match' => [
'field_1' => 'bar',
],
],
],
],
],
但是,我无法添加查询参数来获得我想要的结果。你能帮我吗?
解决方案
您需要组合bool/must/should
查询子句。对于 IN 运算符,您可以在 elasticsearch中使用术语查询
试试下面的查询
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"field_1": "foo"
}
},
{
"terms": {
"field_2": [
1,
2,
3
]
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"field_1": "bar"
}
},
{
"terms": {
"field_2": [
2,
3,
4
]
}
}
]
}
}
]
}
}
}
推荐阅读
- git - 如何丢弃我的本地更改并从存储库克隆一个分支
- javascript - 在 Laravel .htaccess 根实现之后,脚本源将无法工作
- json - Scala - 解码 JSON 时忽略案例类字段
- python-3.x - 使用 else: 会给出无效的语法
- java - 如何将图像从 url 加载到 viewpager2 中?
- php - phpMyAdmin 在 MySQL 表中看不到 Unicode 值
- c++ - 【C++库】:编译时“文件或文件夹不存在”
- python - 为什么 django logging-config 未应用于所有记录器实例?
- python - 在 for/while 循环中,在满足条件后,它会读取以下任何条件吗?
- sql - MS Access using VBA and Form, build a query string and run it