gpt4 book ai didi

java - Spring Data elasticsearch @Query 注解嵌套对象

转载 作者:行者123 更新时间:2023-12-01 22:32:44 25 4
gpt4 key购买 nike

我有两个类,

@Document
public class PracticeQuestion {

private int userId;
private List<Question> questions;

// Getters and setters
}


public class Question {

private int questionID;
private String type;

// Getters and setters
}

我的 JSON 文档是这样的,

{
"_id" : ObjectId("506d9c0ce4b005cb478c2e97"),
"userId" : 1,
"questions" : [
{
"questionID" : 1,
"type" : "optional"

},
{
"questionID" : 3,
"type" : "mandatory"

}
]
}

我应该如何编写查询方法以使用@Query注释通过userId和questionID查找PracticeQuestion。

感谢您的任何建议。

最佳答案

如果您想通过 userId 和 QuestionId 进行搜索。您有 2 个选择。

  1. 使用嵌套查询(上例中的问题是一种嵌套对象,elasticsearch 支持对嵌套对象进行搜索。)。您可以阅读更多相关信息here .

您可以使用 findByUserId 方法创建 PracticeQuestionRepository,如下所示。

public interface PracticeQuestionRepository extends ElasticsearchRepository<PracticeQuestion, String> {
@Query("{"query":{"bool":{"must":[{"match":{"userId":"?0"}},{"nested":{"path":"questions","query":{"bool":{"must":[{"match":{"questions.id":"?1"}}]}}}}]}}}")"
Page<PracticeQuestion> findByUserIdAndQuestionId(String userId, String questionId, Pageable pageable);
}
  • 如果您不想使用嵌套对象。对架构进行反规范化并将问题和 userId 扁平化到同一级别,然后对 userId 和 QuestionId 发出查询。
  • 例如文档1

    {
    "_id": "506d9c0ce4b005cb478c2e97",
    "userId": 1,
    "questionID": 1,
    "type": "optional"
    }

    文档2

    {
    "_id": "506d9c0ce4b005cb478c2e97",
    "userId": 1,
    "questionID": 1,
    "type": "optional"
    }

    存储库代码

    public interface PracticeQuestionRepository extends ElasticsearchRepository<PracticeQuestion, String> {
    @Query("{"bool" : {"must" : [ {"field" : {"userId" : "?0"}}, {"field" : {"questionId" : "?1"}} ]}}"")
    Page<PracticeQuestion> findByUserIdAndQuestionId(String userId, String questionId, Pageable pageable);
    }

    Refer this link for more examples

    关于java - Spring Data elasticsearch @Query 注解嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27374618/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com