[hibernate-dev] HSEARCH-471 Ability to selectively index an entity based on its state

Emmanuel Bernard emmanuel at hibernate.org
Fri Jan 14 03:10:22 EST 2011


Maybe it's time to revive this one since we have started to go down the rabbit hole with indexing only when dirty searched properties are present. 


Begin forwarded message:

> From: "lantz moore (JIRA)" <noreply at atlassian.com>
> Date: 14 janvier 2011 01:52:05 HNEC
> To: emmanuel at hibernate.org
> Subject: [Hibernate-JIRA] Commented: (HSEARCH-471) Ability to selectively index an entity based on its state
> 

> 
> Issue (View Online)
> Key:	HSEARCH-471
> Issue Type:	 New Feature
> Status:	 Open
> Priority:	 Minor
> Assignee:	 Unassigned
> Reporter:	Dobes Vandermeer
> 
> Operations
>   View all
>   View comments
>   View history
> Ability to selectively index an entity based on its state  
> Updated: 13/Jan/11 6:51 PM   Created: 16/Mar/10 12:10 PM  
> 
> The following comment has been added to this issue:	[ Permalink ]
> Author: lantz moore 
> Date: 13/Jan/11 6:51 PM
> Comment: 
> up until some recent restructuring of FullTextIndexEventListener and EventSourceTransactionContext i was able to implement something like this very easily.
> 
> first, my use case: we have a few objects that are expensive to index but are modified "a lot". we only want them indexed at a few well defined transitions: initial creation and when certain members are modified. otherwise, we don't need them to be reindexed.
> 
> to solve this issue with earlier versions of hib-search, we extended FullTextIndexEventListener and overrode processWork. we map classes to MVEL expressions and use the MVEL expressions to evaluate whether or not to index the entity.
> 
> we define the FullTextIndexEventListener in spring and configure it like:
> 
> <bean id="fullTextIndexer" class="com.example.dao.hibernate.FullTextIndexEventListener">
> <property name="entityChecks">
> <map>
> <entry key="com.example.model.RetailTransaction">
> <value>
> if (event is org.hibernate.event.PostUpdateEvent) { return (oldState.suspended != newState.suspended || entity.getTransactionState().name() != "PENDING") }
> return true;
> </value>
> </entry>
> </map>
> </property>
> </bean>
> 
> then instead of autoregistering the default listeners, we register this new listener with the appropriate events. for our particular use case this helped us out quite a bit.
> 
> however, it looks as though we aren't going to be able to do this in the near future because of the redesign of EventSourceTransactionContext and FullTextIndexEventListener.
> 
> EventSourceTransactionContext.getIndexWorkFlushEventListener looks thru the listeners for the FullTextIndexEventListener like so:
> 
> for (FlushEventListener listener : flushEventListeners) {
> if ( listener.getClass().equals( FullTextIndexEventListener.class ) ) { return (FullTextIndexEventListener) listener; }
> }
> 
> which means our subclass of FTIEL isn't be found. plus, it looks as though FTIEL will soon be final.
> 
> so, i don't know if we've been "abusing" the system here, or what, but this seemed like a fairly straight forward way of implementing conditional indexing and has worked really well for us for quite some time.
> 
> i'm not suggesting that hib-search make a dependency on MVEL, etc; however, it would be nice if we were able to continue to subclass FullTextIndexEventListener in the way that we have been.
> 
> 
> Project:	Hibernate Search
> Components:	 mapping
> Affects Versions:	 3.1.1.GA
> Fix Versions:	 3.4.0
> 
>  Description 	 
> In our system we have entities that are searched but not all of them are available for search - some of them are flagged as "removed". It would improve the efficiency of our search subsystem if we could implement a kind of "filter" that blocked these entities from being added to the search index, since we wouldn't have to make that a search term and our indexes would be somewhat smaller.
> 
> 
> This message was automatically generated by Atlassian JIRA Enterprise Edition, Version: 4.1-519 - Bug/feature request. 
> If you think it was sent incorrectly, contact one of this server's administrators.



More information about the hibernate-dev mailing list