我先把一个人的所有信息,都拼接成一个大字符串(用空格隔开)。
目的想输入:“张三 本科”就能直接定位到这个人。
现在简单的创建索引、简单单个词查询都没问题。
就是这个复合查询不会弄。
有没有高人帮我传点例子或者指教一下。十分感谢!
[b]问题补充:[/b]
一楼的是可以。
但是我查 张三 本科 能出来。
但是我查 张三 美术学院 就出不来了
是不是跟分词有关系呀。。
恩,似的,这个就跟分词有关系了,如果你分词库中有美术学院,应该就可以查到,如果没有,建议对搜索的内容进行拆分,比如按照你的词典拆成 美术 学院两部分,估计这样差不多就可以得到了》》》》》。。。。。。。。
使用一个布尔查询就可以了,
BooleanQuery query = new BooleanQuery();
query.add(q1, BooleanClause.Occur.MUST);
query.add(q2, BooleanClause.Occur.MUST);
这样查询获得结果就是你想要的结果了!!
/***** 一个关键字,在两个字段中查询 *****/
/*
* 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);