質問

テーブル「testtable」の構造は次のとおりです。

  1. id int 主キー

  2. 積整数

  3. 属性ID int

  4. 値 varchar(250)

ProductIDが製品の一意のIDである場合、属性は製品の属性の一意の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'
)

このクエリを作成するには助けが必要です。

役に立ちましたか?

解決

これは 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);

他のヒント

データベース上で lucene ベースの検索のセマンティクスを提供する Hibernate Search の使用を見てください。あるいは、luke を見て、lucene がデータにどのようにインデックスを作成したかを確認してください。これを試してみると、lucene のインデックス作成と検索をより深く調べることができるため、lucene クエリを組み立てるのに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top