iteye_1997
2009-09-05 11:28 阅读 254

Lucene查询问题

我先把一个人的所有信息,都拼接成一个大字符串(用空格隔开)。
目的想输入:“张三 本科”就能直接定位到这个人。

现在简单的创建索引、简单单个词查询都没问题。
就是这个复合查询不会弄。

有没有高人帮我传点例子或者指教一下。十分感谢!
[b]问题补充:[/b]
一楼的是可以。

但是我查 张三 本科 能出来。
但是我查 张三 美术学院 就出不来了

是不是跟分词有关系呀。。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    hupy2007 hupy2007 2009-09-08 11:02

    恩,似的,这个就跟分词有关系了,如果你分词库中有美术学院,应该就可以查到,如果没有,建议对搜索的内容进行拆分,比如按照你的词典拆成 美术 学院两部分,估计这样差不多就可以得到了》》》》》。。。。。。。。

    点赞 评论 复制链接分享
  • hupy2007 hupy2007 2009-09-06 10:26

    使用一个布尔查询就可以了,
    BooleanQuery query = new BooleanQuery();
    query.add(q1, BooleanClause.Occur.MUST);
    query.add(q2, BooleanClause.Occur.MUST);

    这样查询获得结果就是你想要的结果了!!

    点赞 评论 复制链接分享
  • X_newman X_newman 2009-09-06 14:44

    /***** 一个关键字,在两个字段中查询 *****/
    /*
    * 1.BooleanClause.Occur[]的三种类型:MUST : + andMUST_NOT : - notSHOULD :
    * or 2.下面查询的意思是:content中必须包含该关键字,而title有没有都无所谓
    * 3.下面的这个查询中,Occur[]的长度必须和Fields[]的长度一致。每个限制条件对应一个字段
    */
    BooleanClause.Occur[] flags = new
    BooleanClause.Occur[]{BooleanClause
    .Occur.SHOULD,BooleanClause.Occur.MUST};
    query=MultiFieldQueryParser.parse(keyword,new
    String[]{"title","content"},flags,analyzer);

            /***** 两个(多个)关键字对两个(多个)字段进行查询,默认匹配规则 *****/
            /*
             * 1.关键字的个数必须和字段的个数相等 2.由于没有指定匹配规定,默认为"SHOULD"
             * 因此,下面查询的意思是:"title"中含有keyword1 或 "content"含有keyword2.
             * 在此例中,把keyword1和keyword2相同
             */
             query=MultiFieldQueryParser.parse(new
             String[]{keyword,keyword},new
             String[]{"title","content"},analyzer);
            /***** 两个(多个)关键字对两个(多个)字段进行查询,手工指定匹配规则 *****/
            /*
             * 1.必须 关键字的个数 == 字段名的个数 == 匹配规则的个数
             * 2.下面查询的意思是:"title"必须不含有keyword1,并且"content"中必须含有keyword2
             */
             BooleanClause.Occur[] flags = new
             BooleanClause.Occur[]{BooleanClause
             .Occur.MUST_NOT,BooleanClause.Occur.MUST};
             query=MultiFieldQueryParser.parse(new
            String[]{keyword,keyword},new
            String[]{"title","content"},flags,analyzer);
    
    点赞 评论 复制链接分享

相关推荐