如何形成查询以查找其 ID 存在于某个列表中的所有记录,例如 [1, 3, 10]?

How to form a query to find all records whose id is present in some list, for example [1, 3, 10]?

如何在 Elasticsearch 中使用 .nest NEST 来形成如下查询:select * from tbl where tbl.id in [1, 3, 10]?或者换句话说,如何形成查询以查找其 ID 存在于某个列表中的所有记录,例如 [1, 3, 10]?

您可以使用 terms query 来实现您的 use-case,在 JSON 中它看起来像下面这样。

GET /_search
{
  "query": {
    "terms": {
      "tbl.id": [ 1,2,4 ],
      "boost": 1.0
    }
  }
}

您可以使用下面的 Elasticarch 查询来搜索文档 _id 字段。

POST index1/_search
{
  "query": {
    "ids": {
      "values": ["1","2","3"]
    }
  }
}

以下是等效的 .Net 代码。

var ids = new long[] { 1, 2, 3 };

var multiGetResponse = client.Search<MyDocument>(s => s
    .Index("index1")
    .Query(q => q
        .Ids(i => i
            .Values(ids)
        )
    )
);

如果您在 Elasticsearch 文档的单独字段中搜索 id 那么您可以使用以下查询:

POST index1/_search
{
  "query": {
    "terms": {
      "id": ["1","2","3"]
    }
  }
}

以下是等效的 .Net 代码。

client.Search<MyDocument>(s => s
        .Index("index1")
        .Query(q => q      
            .Terms(t => t.Field(f => f.Name).Terms(ids))      
        )
);