3

我正在使用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"}
        }
    }
  }
}' 
4

1 回答 1

3

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

匹配查询返回结果,因为它已被分析,因此被小写并找到匹配项。您可以更改您的术语查询并使其成为匹配查询,即使有多个术语,它也会找到匹配项,因为在这种情况下,它将在空格上进行标记,并从提供的不同术语中生成布尔或 dismax 查询。

于 2013-07-22T14:58:51.830 回答