-
14-09-2019 - |
문제
"testtable"테이블의 구조는입니다
ID int 기본 키
productid int
AttributeId int
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 쿼리를 프레임으로 구성하는 데 도움이됩니다.
제휴하지 않습니다 StackOverflow