簡體   English   中英

Hibernate Search不會基於對“計算”值的更改來重新編制索引

[英]Hibernate Search is not reindexing based on changes to “calculated” values

我們在整個應用程序中使用Hibernate Search(4.1)來管理資源的搜索和索引,但是有時需要管理索引中的“計算”值,例如,對@IndexEmbedded或@Field的調用附加到沒有實際屬性的getter上:

    public class Resource {
            @ManyToMany(...)
            private List<Keyword> keywords = new ArrayList<Keyword>();


            public List<Keyword> getKeywords() {
                    return keywords;
            }

            public List<Keyword> setKeywords(List<Keyword> keyword>) {
                    this.keywords=keywords;
            };


            @IndexedEmbedded
            public List<Keyword> getIndexedKeywords() {
                    List<Keyword> toReturn = new ArrayList<Keyword>();
                    for (Keyword keyword: getKeywords()) {
                            if (keyword.isIndexed) {
                                    toReturn.add(keyword);
                            }
                    }
                    return toReturn;
            }

    }

...

public void saveResource(Resource resource, Collection<Keyword> keywords) {
        resource.getKeywords().retainAll(keywords);
        resource.getKeywords().addAll(keywords);
        session.saveOrUpdate(resource);
        // will trigger a persist in the database correctly, but will not trigger a reindex
};

但是調用saveResource不會導致HibernateSearch重新索引。 不是嗎

HibernateSearch 4.1(或3.4之后的任何版本)使用“智能”檢查來查看是否需要進行重新索引編制,這與對Hibernate持久字段的@IndexedEmbedded調用相匹配。 如果這些不匹配,則Hibernate Search不會為該對象重新索引,因為檢查不會看到任何匹配的內容,因此不會調用reindex。 這很可能是因為HibernateSearch必須對索引字段執行大量的反射和自省以確定基礎值是否已更改,或者計算並存儲每個調用的結果,以便可以確定值是否已更改,因此既會減慢重新索引過程的速度,又會/或使用存儲的哈希值或整個結果值使lucene索引膨脹。 最好是簡單地污染導致重新索引的字段,或者最后手動對對象重新索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM