C# 如何查询elasticsearch记录,其中';值==1或未记录的值';?
TLDR——如何查询elasticsearch中“value==1或value not recorded”的记录? 我们在一个相对较新的系统中使用Elasticsearch进行审计跟踪。审计最初仅适用于单个实体 通过创建消息、转换为json并存储,它被保存在Elasticsearch中。这是一个古老的记录:C# 如何查询elasticsearch记录,其中';值==1或未记录的值';?,c#,
elasticsearch,C#,
elasticsearch,TLDR——如何查询elasticsearch中“value==1或value not recorded”的记录? 我们在一个相对较新的系统中使用Elasticsearch进行审计跟踪。审计最初仅适用于单个实体 通过创建消息、转换为json并存储,它被保存在Elasticsearch中。这是一个古老的记录: public class AuditMessage { public int EntityId { get; set; } } 现在,我们希望记录下一个实体的审核跟踪,并将enum
public class AuditMessage
{
public int EntityId { get; set; }
}
现在,我们希望记录下一个实体的审核跟踪,并将enum添加到distinquiresh:
public class AuditMessage
{
public AuditHistoryEnum AuditHistoryEnum { get; set; }
public int EntityId { get; set; }
}
最后我们这样询问:
var response = await _elasticClient.SearchAsync<AuditMessage>(_ => _
.Index(indices)
.From(0)
.Size(500)
.Sort(__ => __.Field(t => t.Timestamp, SortOrder.Descending))
.Query(
q =>
q.Bool(b=>
b.Must(
bs=>bs.Term(m => m.Field(f => f.EntityId).Value(entityId)),
bs=>bs.Match(m=> m.Field(f=> f.AuditHistoryEnum).Query(auditHistoryEnum.ToString())) || bs.Match(m => m.Field(f => f.AuditHistoryEnum).Query(null))
))
)
);
var response = await _elasticClient.SearchAsync<AuditMessage>(_ => _
.Index(indices)
.From(0)
.Size(500)
.Sort(__ => __.Field(t => t.Timestamp, SortOrder.Descending))
.Query(q => q.Terms(t => t.Field(f => f.AuditHistoryEnum).Terms(auditHistoryEnum.ToString()))
|| !q.Exists(e => e.Field(f => f.AuditHistoryEnum))));
var response=await\u elasticClient.SearchAsync(\u=>_
.指数
.从(0)
.尺寸(500)
.Sort(uuu=>uuu.Field(t=>t.Timestamp,SortOrder.Descending))
.查询(
q=>
q、 布尔(b=>
b、 必须(
bs=>bs.Term(m=>m.Field(f=>f.EntityId).Value(EntityId)),
bs=>bs.Match(m=>m.Field(f=>f.AuditHistoryEnum.Query(AuditHistoryEnum.ToString())| | bs.Match(m=>m.Field(f=>f.AuditHistoryEnum.Query(null))
))
)
);
使用上面的查询,我获得了所有新文档,其中AuditHistoryEnum是存储文档中的一个字段。无法使用上面的查询检索添加之前存储的文档。我做错了什么
BR,Anders试试这样的方法:
var response = await _elasticClient.SearchAsync<AuditMessage>(_ => _
.Index(indices)
.From(0)
.Size(500)
.Sort(__ => __.Field(t => t.Timestamp, SortOrder.Descending))
.Query(
q =>
q.Bool(b=>
b.Must(
bs=>bs.Term(m => m.Field(f => f.EntityId).Value(entityId)),
bs=>bs.Match(m=> m.Field(f=> f.AuditHistoryEnum).Query(auditHistoryEnum.ToString())) || bs.Match(m => m.Field(f => f.AuditHistoryEnum).Query(null))
))
)
);
var response = await _elasticClient.SearchAsync<AuditMessage>(_ => _
.Index(indices)
.From(0)
.Size(500)
.Sort(__ => __.Field(t => t.Timestamp, SortOrder.Descending))
.Query(q => q.Terms(t => t.Field(f => f.AuditHistoryEnum).Terms(auditHistoryEnum.ToString()))
|| !q.Exists(e => e.Field(f => f.AuditHistoryEnum))));
var response=await\u elasticClient.SearchAsync(\u=>_
.指数
.从(0)
.尺寸(500)
.Sort(uuu=>uuu.Field(t=>t.Timestamp,SortOrder.Descending))
.Query(q=>q.Terms(t=>t.Field(f=>f.AuditHistoryEnum).Terms(AuditHistoryEnum.ToString())
||!q.Exists(e=>e.Field(f=>f.AuditHistoryEnum));
谢谢!这是前进的道路@安德森:请记住:)