[hibernate-issues] [Hibernate-JIRA] Commented: (HSEARCH-115) Add a default value for indexing null value
Sanne Grinovero (JIRA)
noreply at atlassian.com
Tue Nov 2 06:19:48 EDT 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=38967#action_38967 ]
Sanne Grinovero commented on HSEARCH-115:
-----------------------------------------
Just to illustrate what I was thinking about (didn't test, I might be missing something), I paste the code;
basically when reading the annotations we can wrap any TwoWayFieldBridge we would otherwise use (if two-way)
with an adapter like this:
{noformat}
public class NullEncodingTwoWayFieldBridge implements TwoWayFieldBridge {
private final TwoWayFieldBridge fieldBridge;
private final String nullMarker;
public NullEncodingTwoWayFieldBridge(TwoWayFieldBridge fieldBridge, String nullMarker) {
this.fieldBridge = fieldBridge;
this.nullMarker = nullMarker;
}
public Object get(String name, Document document) {
Field field = document.getField( name );
String stringValue = field.stringValue();
if ( nullMarker.equals( stringValue ) ) {
return null;
}
else {
return fieldBridge.get( name, document );
}
}
public String objectToString(Object object) {
if ( object == null ) {
return nullMarker;
}
else {
return fieldBridge.objectToString( object );
}
}
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
fieldBridge.set( name, value, document, luceneOptions );
}
}
{noformat}
Only downside is that field.stringValue() might be invoked twice for the same field, in both this impl and the wrapped impl; afaik that shouldn't be expensive.
Considering "a bridge is free to do many things" (quoting Emmanuel), do you foresee breaking anything?
> Add a default value for indexing null value
> -------------------------------------------
>
> Key: HSEARCH-115
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-115
> Project: Hibernate Search
> Issue Type: Improvement
> Components: mapping
> Reporter: Julien Brulin
> Assignee: Hardy Ferentschik
> Fix For: 3.3.0
>
>
> Hi,
> Null elements are not indexed by lucene then it's not easy to use a nullable property in lucene query.
> I have a TagTranslation entity in my model with a nullable property language. In this case null is used as default language for tag translation.
> Each translation may have many variations like synonyms.
> Because I can specified a default value for null value in the @Field annotation like this @Field(index=Index.UN_TOKENIZED, store=Store.NO, default='null'), i can't search a cat tag with a default translation like this : +value:cat* +lang:null
> {code}
> @Entity()
> @Table(name="indexing_tag_trans")
> @org.hibernate.annotations.Cache(usage=org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
> @Indexed
> public class TagTranslation implements java.io.Serializable {
> private static final long serialVersionUID = -1065316566731456110L;
>
> @Id
> @GeneratedValue(strategy=GenerationType.IDENTITY)
> @DocumentId
> private Integer id;
>
> @Field(index=Index.UN_TOKENIZED, store=Store.NO)
> private String language;
>
> @Field(index=Index.TOKENIZED, store=Store.YES)
> private String value;
>
> @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
> @org.hibernate.annotations.Fetch(org.hibernate.annotations.FetchMode.SUBSELECT)
> @JoinColumn(name="translation_id")
> @IndexedEmbedded
> private List<TagVariation> variations = new LinkedList<TagVariation>();
>
> public TagTranslation() { }
> ...
> {code}
> What do you think about that ?
> Ps: sorry for english write, i am a french guy.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list