[infinispan-issues] [JBoss JIRA] (ISPN-7842) Declarative indexed entity mapping

Sanne Grinovero (JIRA) issues at jboss.org
Tue May 16 06:02:00 EDT 2017


    [ https://issues.jboss.org/browse/ISPN-7842?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13406846#comment-13406846 ] 

Sanne Grinovero edited comment on ISPN-7842 at 5/16/17 6:01 AM:
----------------------------------------------------------------

h5. High level questions
# (?) I assume the intent that - for a given class type {{A}} - it's going to be mapped *either* via annotations *or* via explicit mapping? (I would suggest to expect that, at least for the first iterations, as we don't support integrating the two at the moment)
# (/) (follow up on previous question) I hope you'll enforce (validate) against listing the same class in both ways
# (flag) We will need to require the actual class definition to be "on classpath" during bootstrap of the Cache. I hope that's fine for the use case?

h5. Property mapping
# (-) Let's not expose index-time boost. We'll deprecate / remove this soon.
# (?) I'm confused about the Spatial mapping example on _city_. Could you add the entity sources to clarify? i.e. you'll need matching {{@Latitude}} and {{@Longitude}} for each Spatial coordinates-set, unless these are embeddables but then you'll need nested mapping.
# (i) _norms_, _term-vectors_, etc.. : in the annotations case we use enums. Let's implement the XML schema to match, i.e. don't accept any string.
# Being able to support {{@FieldBridge}} is typically quite important.

h5. Entity Properties vs Entity Fields
Hibernate Search can map either properties and/or fields. We can read/write to Java fields, and this is supported by Infinispan Query as well.

When having
{code:xml}
 <property name="name" type="method">
                     <field ...
{code}

I guess _type_refers to a getter? A "method" should typically match the full method name. Yet a "getter" is slang for *property* so the block already hinted about it.
Should {{<property>}} be named differently, and have two different identifiers to get rid of the _type_ ?

Should the inner _field_ be named _documentField_ or _indexField_ ?

The {{@Field}} annotation is not ambiguous as one can see it's not a POJO field, but in this context it reads ambiguously.

h5. Nested structures?

What if my POJO contains a map/set of many (one/none/null) objects which need to be mapped ?
In Hibernate Search we support the recursion into the related types, but the child element doesn't have to be {{@Indexed}} on its own.
(!) Careful with polymorphic collections

h5. Analyzer definitions?

I don't think we need to expose all of Hibernate Search features, but defining Analyzers is essential.

h5. Mapping / converstion of Infinispan *keys*

The concept of a separate key is not native in Hibernate Search, yet you need a way to define how key types being used are two-way converted to the index format. This is represented as a {{@ProvidedId}} in the Hibernate Search _internals_ but in this case you might want to expose them in a simpler form.


was (Author: sannegrinovero):
h5. High level questions
# (?) I assume the intent that - for a given class type {{A}} - it's going to be mapped *either* via annotations *or* via explicit mapping? (I would suggest to expect that, at least for the first iterations, as we don't support integrating the two at the moment)
# (/) (follow up on previous question) I hope you'll enforce (validate) against listing the same class in both ways
# (flag) We will need to require the actual class definition to be "on classpath" during bootstrap of the Cache. I hope that's fine for the use case?

h5. Property mapping
# (-) Let's not expose index-time boost. We'll deprecate / remove this soon.
# (?) I'm confused about the Spatial mapping example on _city_. Could you add the entity sources to clarify? i.e. you'll need matching {{@Latitude}} and {{@Longitude}} for each Spatial coordinates-set, unless these are embeddables but then you'll need nested mapping.
# (i) _norms_, _term-vectors_, etc.. : in the annotations case we use enums. Let's implement the XML schema to match, i.e. don't accept any string.
# Being able to support {{@FieldBridge}} is typically quite important.

h5. Entity Properties vs Entity Fields
Hibernate Search can map either properties and/or fields. We can read/write to Java fields, and this is supported by Infinispan Query as well.

When having
{code:xml}
 <property name="name" type="method">
                     <field ...
{code}

I guess _type_refers to a getter? A "method" should typically match the full method name. Yet a "getter" is slang for *property* so the block already hinted about it.
Should {{<property>}} be named differently, and have two different identifiers to get rid of the _type_ ?

Should the inner _field_ be named _documentField_ or _indexField_ ?

The {{@Field}} annotation is not ambiguous as one can see it's not a POJO field, but in this context it reads ambiguously.

h5. Nested structures?

What if my POJO contains a map/set of many (one/none/null) objects which need to be mapped ?
In Hibernate Search we support the recursion into the related types, but the child element doesn't have to be {{@Indexed}} on its own.
(!) Careful with polymorphic collections

h5. Analyzer definitions?

I don't think we need to expose all of Hibernate Search features, but defining Analyzers is essential.

> Declarative indexed entity mapping
> ----------------------------------
>
>                 Key: ISPN-7842
>                 URL: https://issues.jboss.org/browse/ISPN-7842
>             Project: Infinispan
>          Issue Type: Enhancement
>          Components: Configuration, Embedded Querying
>            Reporter: Tristan Tarrant
>            Assignee: Jakub Senko
>            Priority: Minor
>
> We need a way to list annotation-less indexed entities in the infinispan XML.
> The 
> {noformat}
> <indexed-entities>
> {noformat}
>  element schema will need to be extended as follows:
> {code:xml}
>             <indexed-entities>
>                <!-- annotated entity -->
>                <indexed-entity>org.infinispan.query.queries.faceting.Car</indexed-entity>
>                <!-- non-annotated entity -->
>                <indexed-entity-mapping>
>                   <!-- the FQN of the class to index -->
>                   <class>my.domain.model.Author</class>
>                   <!-- optional -->
>                   <spatial name="place" mode="HASH"/>
>                   <!-- list of indexed properties -->
>                   <property name="name" type="method">
>                      <field store="true" index="true" analyze="true" norms="true" term-vector="yes" boost="0.5"/>
>                   </property>
>                   <property name="title" type="method">
>                      <field store="true" index="true" analyze="true" norms="true" term-vector="yes" boost="0.5" analyzer="titleanalyzer"/>
>                   </property>
>                   <property type="method" name="birthdate">
>                      <field store="true" index="true" analyze="true" norms="true" term-vector="yes" boost="0.5"/>
>                      <date-bridge resolution="DAY"/>
>                   </property>
>                   
>                   <property type="method" name="city">
>                      <spatial name="name" store="true" boost="0.5" spatial-mode="RANGE" />
>                   </property>
>                </indexed-entity-mapping>
>             </indexed-entities>
>             
> {code}



--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the infinispan-issues mailing list