代码之家  ›  专栏  ›  技术社区  ›  Batakj

Lucene中的查询

  •  2
  • Batakj  · 技术社区  · 17 年前

    “testtable”表的结构为

    1. id int主键

    其中productid是产品的唯一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 回复  |  直到 17 年前
        1
  •  4
  •   Cambium    17 年前

    我认为你必须分两步来做这件事:

    第一步:提取产品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);
    
        2
  •  0
  •   user121803    17 年前

    推荐文章