我正在使用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"}
}
}
}
}'
答案 0 :(得分:3)
我想您使用的是默认映射,因此使用standard analyzer分析名称字段。另一方面,术语查询和术语过滤器不支持文本分析,因此您在索引Alastair Reynolds
和alastair
中搜索令牌reynolds
作为两个不同的令牌和小写
匹配查询返回结果,因为它已被分析,因此在小写下面,它找到匹配。您只需更改term query并将其设为match query,即使有多个术语也会找到匹配项,因为在这种情况下,它会在空格上进行标记化,并会生成一个布尔值或dismax查询。提供不同的条款。