我有一个关于 Elasticsearch DSL 的问题。
我想进行全文搜索,但将可搜索记录的范围限定为特定的数据库 ID 数组。
在 SQL 世界中,它将是WHERE id IN(1, 2, 3, 4)
.
我一直在研究,但我发现 Elasticsearch 查询 DSL 文档有点神秘,而且没有有用的示例。谁能指出我正确的方向?
我有一个关于 Elasticsearch DSL 的问题。
我想进行全文搜索,但将可搜索记录的范围限定为特定的数据库 ID 数组。
在 SQL 世界中,它将是WHERE id IN(1, 2, 3, 4)
.
我一直在研究,但我发现 Elasticsearch 查询 DSL 文档有点神秘,而且没有有用的示例。谁能指出我正确的方向?
这是一个可能对您有用的示例查询。这假定该_all
字段已在您的索引上启用(这是默认设置)。它将对索引中的所有字段进行全文搜索。此外,使用添加的ids
过滤器,查询将排除 id 不在给定数组中的任何文档。
{
"bool": {
"must": {
"match": {
"_all": "your search text"
}
},
"filter": {
"ids": {
"values": ["1","2","3","4"]
}
}
}
}
希望这可以帮助!
正如 Ali Beyad 所讨论的,查询中的 ids 字段可以为您做到这一点。为了补充他的回答,我举了一个工作示例。以防将来有人需要它。
GET index_name/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"field": "your query"
}
},
{
"ids" : {
"values" : ["0aRM6ngBFlDmSSLpu_J4", "0qRM6ngBFlDmSSLpu_J4"]
}
}
]
}
}
}
您可以在 MUST 子句中创建一个包含 Ids 查询的 bool 查询: https ://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-ids-query.html
通过在 bool 查询中使用 MUST 子句,您的搜索将进一步受到您指定的 Id 的限制。我在这里假设您的 ID 是指文档的 _id 值。
使用 elasticaBundle symfony 5.2
$query = new Query();
$IdsQuery = new Query\Ids();
$IdsQuery->setIds($id);
$query->setQuery($IdsQuery);
$this->finder->find($query, $limit);