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