Pregunta

Estoy usando hibernado. Estoy buscando un motor de texto gratuito.

Antes de investigarlo, necesito tu experiencia.

Tengo en mi tabla de usuario, rol y objetos de aplicaciones. Donde un usuario está conectado a uno o más roles, y un rol está conectado a uno o más objetos.

En mi búsqueda de texto gratuito, el usuario solo puede llegar a datos que puede ver por la tabla de objetos.

¿Puede la búsqueda de hibernación ayudarme con eso?

¿Fue útil?

Solución

Mira esto:

http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/filter.html

Creo que esta es la forma correcta de implementar lo que desea. Realmente no sé cómo se integra esto en la búsqueda hibernada, pero espero que haya una manera de agregar un filtro a una consulta de alguna manera.

Luego editar:

Parece que hay:

http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-query.html#query-filter

Otros consejos

Según lo que ha descrito su modelo, Hibernate Search podrá darle lo que necesita con bastante facilidad.

Parece que está buscando una combinación de un índice incrustado y un filtro. Supongo que tienes muchas relaciones entre objeto y rol. Si es así, probablemente tengas algo como esto en el objeto:

@ManyToMany
@JoinTable(name = "object_role",
            joinColumns = @JoinColumn(name = "object_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<Role>();

Para tomar los roles e incrustarlos como parte del índice creado para el objeto, solo debe poner @IndexedEmbedded(prefix = "somPrefixName") arriba @ManyToMany.

Luego puede definir un filtro usando @FullTextFilterDef Eso analiza este índice y filtros integrados por un papel dado (que presumiblemente sería el papel del usuario que está ejecutando la búsqueda). Esto asegurará que solo los objetos relacionados con el rol dado sean devueltos por la consulta de búsqueda.

En resumen, Hibernate Search podrá proporcionar lo que necesita (suponiendo que comprenda su requisito correctamente). Estaré encantado de dar más detalles sobre cómo si lo desea.

Estos son dos problemas separados:

  • restringir en qué contenido un usuario puede buscar dentro
  • realmente buscando el contenido

Mientras que para el segundo problema puede usar fácilmente Búsqueda de hibbernado (Eso es solo Apache Lucene Con un poco de integración), para el primero debe concentrarse en seleccionar el contenido correcto que desea buscar antes de buscarlo con Lucene.

Para restringir al usuario solo a ciertos datos, supongo que sus datos se asignarán a roles accesibles. Si este es el caso, también debe indexar su objeto de roles. Luego use la anotación de @IndexedEmbedded con la asociación individual o individual.

Luego puede construir su consulta como: "Text: + input.getSearchText () +" + role.roletext: " + currentUser.getRole ();

Esto puede o no funcionar dependiendo de cuán complejo sea su sistema de gestión de usuarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top