可能是一个非常愚蠢的问题,检查elasticsearch中的文档字段是否存在的最佳方法是什么?我在文档中找不到任何内容。
例如,如果此文档没有字段/密钥"价格"我不想回到结果中。
{ "更新":" 2015/09/17 11:27:27", "名称":"眼影", "格式":" 1.5克/0.05盎司", }
我能做什么?
由于
答案 0 :(得分:40)
您可以将exists
filter与bool/must
filter结合使用,如下所示:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "price"
}
},
... <-- your other constraints, if any
]
}
}
}
}
}
已弃用(自ES5开始)您还可以将missing
filter与bool/must_not
filter结合使用
{
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": [
{
"missing": {
"field": "price"
}
}
]
}
}
}
}
}
答案 1 :(得分:11)
exists
过滤器已被ES 2.1中的exists
查询取代,但其工作方式相同。此外,删除了丢失的过滤器,并且不推荐使用丢失的查询。
要获取具有特定字段的所有文档,
"bool": {
"must": {
"exists": {
"field": "my_field"
}
}
}
要获取所有没有特定字段的文档,请将其与此must_not
一起使用
"bool": {
"must_not": {
"exists": {
"field": "my_field"
}
}
}
弹性文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-missing-query.html
答案 2 :(得分:9)
您可以使用存在过滤器:
{
"query": {
"filtered": {
"filter": {
"exists": {
"field": "status"
}
},
"query": {
"match_all": {}
}
}
}
}
此致 阿兰
答案 3 :(得分:7)
你可以直接做
{
"query": {
"exists": {
"field": "fieldName"
}
}
}
如果你想添加一些比赛,那么你可以去
{
"query": {
"bool": {
"must": [{
"match": {
"fieldName": "value"
}
},
{
"exists": {
"field": "fieldName"
}
}]
}
}
}
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html
答案 4 :(得分:1)
public class SentMessage
{
public string MessageFrom { get; set; }
public string MessageTo { get; set; }
public string Message { get; set; }
}
// Post a new message
[Route("Conversation/AddTo")]
[HttpPost]
public IHttpActionResult AddToConversation(SentMessage message)
{
if (message is null)
{
return NotFound();
}
return Ok("Message Sent");
}
来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html