【问题标题】:Hibernate Search Dynamically Determine Indexed FieldsHibernate Search 动态确定索引字段
【发布时间】:2016-02-23 15:41:00
【问题描述】:

我有一个如下图所示的实体;字段到列的映射是使用 XML 执行的,所以在这里不可见。我正在使用 Hibernate 搜索在某些实体的某些字段被修改时索引它们。

@Indexed
public class DataObject extends AbstractEntity {    

    @DocumentId
    private Long id;
    ...

    @Field
    private String summary;

    @Field
    private String description;

    private Map<String, Object> extendedProperties;
}

现在,我为使用注释启用搜索的属性一切正常。

我使用extendedProperties 允许将动态属性添加到DataObject。这些属性映射到 PostgreSQL 9.4 中的“jsonb”类型,并存储为 JSON 对象。扩展属性是可配置的,配置将有一个属性 indexed 来确定是否应该为属性建立索引。

我想要做的是在插入或更新实体被索引之前将可搜索的属性及其值添加到 EntityIndexBinding(我在调试 Hibernate 代码后到达这里)。有没有办法做到这一点,如果有怎么办?

【问题讨论】:

    标签: hibernate hibernate-search


    【解决方案1】:

    到目前为止,这似乎有效......

    @Indexed
    public class DataObject extends AbstractEntity {    
    
        @DocumentId
        private Long id;
        ...
    
        @Field
        private String summary;
    
        @Field
        private String description;
    
        @Column(name = "extendedProperties")
        @Type(type = "StringJsonObject") // to map to PostgreSQL jsonb  
        @Field(name="", bridge = @FieldBridge( impl = ExtendedPropertyBridge.class))
        private Map<String, Object> extendedProperties;
    }
    
    public class ExtendedPropertyBridge implements FieldBridge {    
    
        @Override
        public void set(String name, Object value, Document document,
                LuceneOptions luceneOptions) {
    
            @SuppressWarnings("unchecked")
            Map<String, Object> map = (Map<String, Object>)value;
            for (String key : map.keySet()) {
                //TODO validate if key is searchable
                String val = map.get(key).toString();
                if (val != null) {
                    luceneOptions.addFieldToDocument(key, val, document);
                }
            }
        }   
    }
    

    查询时我必须使用 ignoreFieldBridge() 选项。

    参考

    https://docs.jboss.org/hibernate/search/5.2/reference/en-US/html/search-mapping.html#search-mapping-bridge

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-22
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多