2

テーブル「testtable」の構造は

  1. id int 主キー

  2. 製品 ID int

  3. 属性 ID int

  4. 値 varchar(250)

ここで、productid は製品の一意の ID、attributeid は製品の属性の一意の 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'
)

このクエリを作成するにはヘルプが必要です..

4

2 に答える 2

4

これは次の 2 つの手順で行う必要があると思います。

ステップ 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);

次に、ドキュメントから productId を抽出する必要があります

ステップ 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);
于 2009-06-26T21:53:53.823 に答える
0

データベースでの lucene ベースの検索のセマンティクスを提供する Hibernate Search の使用を検討してください。または、luke を見て、lucene がデータにどのようにインデックスを付けたかを調べてください。これをいじってみると、lucene のインデックス作成と検索を詳しく調べることができるので、lucene クエリを構成するのに役立ちます。

于 2009-06-16T07:40:46.010 に答える