Pregunta

La estructura de la tabla "testtable" es

  1. ID int clave primaria

  2. producto int

  3. ID de atributo int

  4. valorvarchar(250)

Donde ProductID es la identificación única de un producto, AttributeID es la identificación única del atributo de un producto, por ejemplo,tamaño, calidad, altura, color y 'valor' es el valor del atributo

Tengo que filtrar un resultado.Alcanzo el requisito mediante esta consulta.Pero no puedo hacerlo en una consulta.

select a.* from dbo.testtable a
where a.attributeId=10 and a.[Value]='Romance'
and productId in
(
    select productId
    from
    dbo.testtable where attributeId =7 and [Value]='Hindi'
)

Necesito ayuda para construir esta consulta.

¿Fue útil?

Solución

Creo que tienes que hacer esto en dos pasos:

Paso 1:extraer identificadores de productos

BooleanQuery query = new BooleanQuery();

query.add(new TermQuery("attributeId", 7), BooleanClause.Occur.MUST); 
query.add(new TermQuery("value", "hindi"), BooleanClause.Occur.MUST); 
TopDocs docs = searcher.search(query, null, searchLimit);

Luego necesitas extraer el ID del producto de los documentos.

Paso 2:ejecutar consulta

BooleanQuery query = new BooleanQuery();

query.add(new TermQuery("attributeId", 10), BooleanClause.Occur.MUST); 
query.add(new TermQuery("value", "Romance"), BooleanClause.Occur.MUST); 

// build "IN" clause
BooleanQuery pidQuery = new BooleanQuery();
for( long productId : productIds ){
    pidQuery.add(new TermQuery("productId", productId), BooleanClause.Occur.SHOULD); 
}
query.add(pidQuery, BooleanClause.Occur.MUST); 
TopDocs docs = searcher.search(query, null, searchLimit);

Otros consejos

Considere el uso de Hibernate Search, que le proporciona la semántica de la búsqueda basada en lucene en una base de datos.Alternativamente, mire a Luke y descubra cómo Lucene ha indexado sus datos.Juegue con él y le ayudará a formular consultas de Lucene, ya que le brindará una visión más profunda de la indexación y búsqueda de Lucene.

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