我确定这是一个愚蠢的问题,但是......
给出以下索引
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 }
}
};
有人能告诉我我做错了吗?
答案 0 :(得分:1)
在Id
字段上搜索与在任何其他字段上搜索相同;使用Id
字段时,可能应该将其映射为keyword
type,在这种情况下,字段上的term
query可以正常工作。
但是,因为NEST从映射到Elasticsearch类型的POCO上的Id
属性推断_id
field,而_id
对于某个类型中的类型是唯一的index,对于给定索引中的给定类型,Id
只会有一个匹配项。您可以简单地使用GET API来获取索引中给定ID的文档,而不是搜索Id
。如果您需要搜索不同索引和类型的ID,那么term
查询就是您所追求的。