Java 查询嵌套文档Elasticsearch
我正在学习Elasticsearch,因此我不确定此查询是否正确。我已经检查了数据是否被索引,但没有得到任何点击。我做错了什么?这难道不应该在一辆创造者名叫史蒂夫的汽车上引起轰动吗Java 查询嵌套文档Elasticsearch,java,jakarta-ee,full-text-search,
elasticsearch,Java,Jakarta Ee,Full Text Search,
elasticsearch,我正在学习Elasticsearch,因此我不确定此查询是否正确。我已经检查了数据是否被索引,但没有得到任何点击。我做错了什么?这难道不应该在一辆创造者名叫史蒂夫的汽车上引起轰动吗 builder .startObject() .startObject("car") .field("type", "nested") .startObject("properties") .startObject("creators")
builder
.startObject()
.startObject("car")
.field("type", "nested")
.startObject("properties")
.startObject("creators")
.field("type", "nested")
.endObject()
.endObject()
.endObject()
.endObject();
{
"query": {
"bool": {
"must": [
{
"term": {
"car.creators.name": "Steve"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}
首先,为了搜索嵌套字段,您需要使用:
如果使用标准分析器对
car.creators.name
进行索引,则{“term”:{“creators.name”:“Steve”}
将找不到任何内容,因为wordSteve
被索引为Steve
,并且不会执行分析。因此,最好用{“match”:{“creators.name”:“Steve”}
替换它,谢谢!但我必须将路径字段移出查询对象,并在路径中插入“creators”,并且只在术语中使用creators.name。这听起来是错的还是对的?是的,你是对的。路径应该与查询处于同一级别,并且应该包含“car.creators”。我已经更新了示例。不确定术语中的creators.name。在你的情况下,汽车是一种类型吗?是的,汽车是一种类型吗?既然我正在学习Elasticsearch,你介意解释一下为什么我不需要它,而你能设法让它工作吗?我只是感到困惑。当我看到“type”:“嵌套”
在car
下时,我想car
是一个字段。如果car
是一个类型,您不需要的“类型”:“嵌套”
在那里,是的,您需要在查询中使用创建者.name
。我修改了我的示例,将car用作类型。在“path”元素中,类型是可选的。它可以在那里,但因为我已经在url上指定了类型,所以它是不必要的。类型不应出现在嵌套查询中。
curl -XDELETE localhost:9200/test
curl -XPUT localhost:9200/test -d '{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 0
},
"mappings": {
"car": {
"properties": {
"creators" : {
"type": "nested",
"properties": {
"name": {"type":"string"}
}
}
}
}
}
}
}
'
curl -XPOST localhost:9200/test/car/1 -d '{
"creators": {
"name": "Steve"
}
}
'
curl -X POST 'http://localhost:9200/test/_refresh'
echo
curl -X GET 'http://localhost:9200/test/car/_search?pretty' -d ' {
"query": {
"nested": {
"path": "creators",
"query": {
"bool": {
"must": [{
"match": {
"creators.name": "Steve"
}
}],
"must_not": [],
"should": []
}
}
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}
'