cancel
Showing results for 
Search instead for 
Did you mean: 

Duda con Lucene Search

ruben_arjonilla
Champ in-the-making
Champ in-the-making
Buenos días,

tengo una duda sobre que se puede y que no se puede hacer con una búsqueda lucene.
Pondré un ejemplo, tengo estos 2 tipos, A y B, donde B tiene definida una asociación de documentos de tipo A
<type name="x:a">
   <title>A</title>
   <parent>cm:content</parent>
   <properties>
      <property name="x:campo1">
         <title>campo 1</title>
         <description>Descripción campo 1</description>
         <type>d:text</type>
         <mandatory>false</mandatory>
         <default></default>
      </property>
   </properties>
</type>
<type name="x:b">
   <title>B</title>
   <parent>cm:content</parent>
   <properties>
      <property name="x:campo2">
         <title>campo 2</title>
         <description>Descripción campo 2</description>
         <type>d:text</type>
         <mandatory>false</mandatory>
         <default></default>
      </property>
   </properties>

   <associations>
      <association name="x:asocA">
         <title>Asociaciones con documentos A</title>
         <description>Asociación de documentos del tipo A</description>
         <source>
            <mandatory>false</mandatory>
            <many>true</many>
         </source>
         <target>
            <class>x:a</class>
            <mandatory>false</mandatory>
            <many>true</many>
         </target>
      </association>
   </associations>
</type>

ahora imaginemos que tengo 1 documento A y 2 documentos B
A1.txt
B1.txt –> tiene una asociación con el documento A1.txt
B2.txt –> no tiene ninguna asociación con ningún documento

Se puede buscar que documentos del tipo B tienen asociado el documento A1.txt? siempre partiendo desde que lo único que tengo es el documento A1.txt
O sea, me tendría que devolver el documento B1.txt, que es el que tiene la  asociación con el documento A1.txt
Que debería poner en la lucene search? estoy haciendo pruebas desde el Node Browser, pero no consigo dar con ninguna solución.

Gracias de antemano.
13 REPLIES 13

yakon_8894
Champ in-the-making
Champ in-the-making
Hola ruben,

no se si esta solución te puede servir, pero podrías definir una propiedad en tu modelo que almacene los nodeRef de los documentos tipo B que están relacionados con el tipo A. Por ejemplo:

<property name="A:B_Ref">
  <title>nodeRefs de tipo B relacionados con A</title>
  <type>d:noderef</type>   
  <multiple>true</multiple>
</property>

Después sabiendo el nodeRef de un nodo de tipo B podrías buscar todos los nodos de tipo A que estén asociados con B.

Un saludo

ruben_arjonilla
Champ in-the-making
Champ in-the-making
Me puede servir.
Solo tengo que realizar la prueba a ver si me devuelve los resultados que quiero.

Muchas gracias a todos por vuestra ayuda.

srojas
Champ in-the-making
Champ in-the-making
Hola. Con Lucene lo mismo no lo puedes hacer, pero si por código.

Por ejemplo si utilizas la FoundationServicesApi, a partir del documento A podrías obtener todas las asociaciones de este documento en las que él actúa como target:

nodeService.getSourceAssocs(NodeRef targetRef, QNamePattern qnamePattern) .

Como puedes comprobar también puedes filtrar por ejemplo por el tipo de asociacion (segundo parámetro del método).

De esta forma podrías obtener todas las asociaciones de un tipo determinado cuyo target sea A.

Esto es con FoundationServicesApi, sin embargo en las otras apis habrá métodos análogos.

Un saludo.

ruben_arjonilla
Champ in-the-making
Champ in-the-making
Hace nada que me adentre a probar a hacer cosas en java, buscare un poco mas de información sobre la FoundationServicesApi y lo probare.

Muchas gracias por tu respuesta Smiley Happy