范围弹性搜索结果到特定ID

时间:2016-01-20 22:47:26

标签: elasticsearch elasticsearch-dsl elasticsearch-rails

我对Elasticsearch DSL有疑问。

我想进行全文搜索,但将可搜索的记录范围限定为特定的数据库ID数组。

在SQL世界中,它的功能相当于WHERE id IN(1, 2, 3, 4)

我一直在研究,但我发现Elasticsearch查询DSL文档有点神秘,缺乏有用的例子。有人能指出我正确的方向吗?

5 个答案:

答案 0 :(得分:2)

这是一个可能适合您的示例查询。这假定您的索引上启用了_all字段(这是默认值)。它将对索引中的所有字段进行全文搜索。此外,使用添加的ids过滤器,查询将排除ID不在给定数组中的任何文档。

{
  "bool": {
    "must": {
      "match": {
        "_all": "your search text"
      }
    },
    "filter": {
      "ids": {
        "values": ["1","2","3","4"]
      }
    }
  }
}

希望这有帮助!

答案 1 :(得分:1)

正如 Ali Beyad 所讨论的,查询中的 ids 字段可以为您做到这一点。为了补充他的回答,我举了一个有效的例子。以防将来有人需要它。

GET index_name/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "field": "your query"
          }
        },
        {
          "ids" : {
            "values" : ["0aRM6ngBFlDmSSLpu_J4", "0qRM6ngBFlDmSSLpu_J4"]
          }
        }
      ]
    }
  }
}

答案 2 :(得分:0)

您可以在MUST子句中创建包含Ids查询的bool查询: https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-ids-query.html

通过在bool查询中使用MUST子句,您的搜索将受到您指定的ID的进一步限制。我在这里假设您是指文件的_id值。

答案 3 :(得分:0)

根据es doc,您可以

<块引用>

根据文档的 ID 返回文档。

GET /_search
{
  "query": {
    "ids" : {
      "values" : ["1", "4", "100"]
    }
  }
}

答案 4 :(得分:0)

使用elasticaBundle symfony 5.2

    $query = new Query();
    $IdsQuery = new Query\Ids();
    $IdsQuery->setIds($id);
    $query->setQuery($IdsQuery);
    $this->finder->find($query, $limit);