你如何通过Id搜索?

时间:2017-07-27 02:18:00

标签: elasticsearch nest

我确定这是一个愚蠢的问题,但是......

给出以下索引

public class RandomIndex {
    public int Id { get; set; }
    public String name { get; set; }
}

如何通过Id搜索?

我可以使用NEST通过名称进行搜索,但出于某种原因,我可以通过ID进行搜索。我猜它是因为它是一个结构化的领域?

以下是我正在使用的SearchRequest。请注意,我可以按名称成功查询,而不是通过Id。

请注意,这是我传入fieldName和searchTerm以查找的函数。

return new Nest.SearchRequest {
    From = offset,
    Size = 50,

    Query = new Nest.SimpleQueryStringQuery() {
      Query = $"\"{search}\"",
      Fields = new Nest.Field[] { fieldName }
    }
};

有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:1)

Id字段上搜索与在任何其他字段上搜索相同;使用Id字段时,可能应该将其映射为keyword type,在这种情况下,字段上的term query可以正常工作。

但是,因为NEST从映射到Elasticsearch类型的POCO上的Id属性推断_id field,而_id对于某个类型中的类型是唯一的index,对于给定索引中的给定类型,Id只会有一个匹配项。您可以简单地使用GET API来获取索引中给定ID的文档,而不是搜索Id。如果您需要搜索不同索引和类型的ID,那么term查询就是您所追求的。