문제

"testtable"테이블의 구조는입니다

  1. ID int 기본 키

  2. productid int

  3. AttributeId int

  4. Value Varchar (250)

ProductID가 제품의 고유 한 ID 인 경우 Attribute는 제품의 고유 한 ID 예를 들어 크기, 품질, 높이, 색상 및 '값'이 속성의 값입니다.

결과를 필터링해야합니다. 이 쿼리로 요구 사항을 달성합니다. 그러나 나는 그것을 쿼리로 만들 수 없습니다.

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'
)

이 쿼리를 구축하려면 도움이 필요합니다 ..

도움이 되었습니까?

해결책

두 단계 로이 작업을 수행해야한다고 생각합니다.

1 단계 : 제품 ID를 추출합니다

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);

그런 다음 문서에서 제품을 추출해야합니다.

2 단계 : 쿼리 실행

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);

다른 팁

데이터베이스에서 Lucene 기반 검색의 의미론을 제공하는 최대 절전 모드 검색을 사용하십시오. 또는 Luke를보고 Lucene이 어떻게 데이터를 색인화했는지 알아냅니다. 그것과 함께 놀면 루센 인덱싱 및 검색에 대한 자세한 내용을 제공하므로 Lucene 쿼리를 프레임으로 구성하는 데 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top