2 fhqibjg fhqibjg 于 2013.06.08 16:23 提问

lucene多条件搜索时or与and问题

lucene版本:3.6
分词器:ansj_seg-master

在lucene多条件搜索时,想根据两个字段去做搜索,创建的Query如下所示

    Analyzer analyzer = new AnsjAnalysis();
    String paramsStr[] = new String[] { "CA0000001", "特惠" };
    String keys[] = new String[] {"code", "name" };
    BooleanClause.Occur occur[] = new BooleanClause.Occur[] { BooleanClause.Occur.MUST,
            BooleanClause.Occur.MUST};
    Query query = MultiFieldQueryParser.parse(Version.LUCENE_36, paramsStr, keys,
            occur, analyzer);

索引中确定有code为"CA0000001",name为"特惠"的数据,但就是为BooleanClause.Occur.MUST时找不到,如果为BooleanClause.Occur.SHOULD,则可以查询到那条数据

请问各位要怎么解决?

3个回答

ansjsun
ansjsun   2013.06.08 16:39
已采纳

should戴表两个字段中必须有一个..must是必须都存在...你看看大小写啥的..有可能建索引的时候全都小写了

fhqibjg
fhqibjg   2013.06.08 16:47

分词器是全都转换成小写的,所以肯定是统一了的

fhqibjg
fhqibjg   2013.06.08 16:53

好像发现问题了,MultiFieldQueryParser是分词查询,而建索引时那个code字段是Index.NOT_ANALYZED的,所以不行。感谢ansj提醒

suannai0314
suannai0314 如果问题解决了,就点击答案左侧的√进行采纳哦
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!