【问题标题】:How to get parent document immediately followed by child documents如何立即获取父文档,然后是子文档
【发布时间】:2018-03-08 18:23:17
【问题描述】:

我正在使用弹性搜索进行休眠搜索。我有一个要求,我需要立即获取父文档,然后是子文档。 为了维护父子关系,我有一个带有 id 和 parentId 列的表。这里 parentId 是另一个记录的 id。例如

注意:为了更好的理解运行下面的sn-p

<html>
<body>

<table border="1" >
  <tr>
    <th>ID</th>
    <th>Name</th>
    <th>ParentId</th>
  </tr>
  <tr>
    <td>1</td>
    <td>Samule</td>
    <td>0</td>
    
  </tr>
  <tr>
    <td>2</td>
    <td>jhon</td>
    <td>1</td>
    
  </tr>
 <tr>
    <td>3</td>
    <td>peeter</td>
    <td>2</td>
    
  </tr>
</table>

</body>
</html>

预期输出:

例如:当搜索名称等于Samule时,它需要按以下顺序获取

1

2

这里第一条记录是父记录,第二条记录是子记录。弹性搜索和休眠搜索有什么办法吗?

【问题讨论】:

    标签: elasticsearch hibernate-search


    【解决方案1】:

    我认为这可能发生的唯一方法是,如果您的层次结构具有已知的最大深度。例如,如果您知道您将永远只有两级父母,而不是三级。

    如果是你的情况,你可以有这样的模型:

    @Indexed
    public class Document {
    
      @DocumentId
      private int id;
    
      @Field
      private String text;
    
      @IndexedEmbedded(depth = /* YOUR MAX DEPTH HERE */)
      private Document parent;
    
      @Field(name = "path_sort", analyze = Analyze.NO)
      public String getPath() {
        return parent == null ? id : parent.getPath() + "." + id;
      }
    
    }
    

    然后像这样执行搜索:

    FullTextSession fts = ... ;
    
    QueryBuilder qb = fts.getSearchFactory()
                    .buildQueryBuilder()
                    .forEntity( Document.class )
                    .get();
    
    Query query = qb.keyword().onFields(
                    "text",
                    "parent.text",
                    "parent.parent.text"
                    /* and so on, on as many levels as necessary */
            )
            .matching( "some string" )
            .createQuery();
    
    Sort sort = qb.sort().byField( "path_sort" ).createSort();
    
    List<Document> result = fts.createFullTextQuery( query, Document.class )
                    .setSort( sort )
                    .list();
    

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 2015-02-10
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2020-09-15
      • 2019-07-10
      • 1970-01-01
      • 2014-06-10
      相关资源
      最近更新 更多