elasticsearch,Java,Jakarta Ee,Full Text Search,elasticsearch" /> elasticsearch,Java,Jakarta Ee,Full Text Search,elasticsearch" />

Java 查询嵌套文档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")

我正在学习Elasticsearch,因此我不确定此查询是否正确。我已经检查了数据是否被索引,但没有得到任何点击。我做错了什么?这难道不应该在一辆创造者名叫史蒂夫的汽车上引起轰动吗

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”}
将找不到任何内容,因为word
Steve
被索引为
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": {}
}
'