ElasticSearch has_parent查询

时间:2013-07-22 07:22:15

标签: elasticsearch

我正在使用fun-with-elasticsearch-s-children-and-nested-documents/中的一些简单示例来试验Elasticsearch父/子。我可以通过在博客中运行查询来查询子元素

curl -XPOST localhost:9200/authors/bare_author/_search -d '{

但是,我无法调整has_parent查询的示例。有人可以指出我做错了什么,因为我一直得到0结果。

这就是我试过的

#Returns 0 hits    
curl -XPOST localhost:9200/authors/book/_search -d '{
  "query": {
    "has_parent": {
      "type": "bare_author",
      "query" : {
        "filtered": {
          "query": { "match_all": {}},
          "filter" : {"term": {  "name": "Alastair Reynolds"}}            
          }
        }
      }
    }
  }'


#did not work either
curl -XPOST localhost:9200/authors/book/_search -d '{
"query": {
    "has_parent" : {
        "type" : "bare_author",
       "query" : {
        "term" : {
                "name" : "Alastair Reynolds"
            }
        }
    }
}
}' 

这适用于匹配,但它只匹配名字

    #works but matches just first name
curl -XPOST localhost:9200/authors/book/_search -d '{
"query": {
    "has_parent" : {
        "type" : "bare_author",
       "query" : {
        "match" : {"name": "Alastair"}
        }
    }
  }
}' 

1 个答案:

答案 0 :(得分:3)

我想您使用的是默认映射,因此使用standard analyzer分析名称字段。另一方面,术语查询和术语过滤器不支持文本分析,因此您在索引Alastair Reynoldsalastair中搜索令牌reynolds作为两个不同的令牌和小写

匹配查询返回结果,因为它已被分析,因此在小写下面,它找到匹配。您只需更改term query并将其设为match query,即使有多个术语也会找到匹配项,因为在这种情况下,它会在空格上进行标记化,并会生成一个布尔值或dismax查询。提供不同的条款。