lucene搜索输入一个关键字,如何匹配多个索引field
索引代码如下
Document doc = new Document();
doc.add(new Field("contents", rs.getString("title"), Field.Store.YES,
Field.Index.ANALYZED));
doc.add(new Field("roomid", rs.getString("roomid"), Field.Store.YES,
Field.Index.ANALYZED));
doc.add(new Field("address", rs.getString("address"), Field.Store.YES,
Field.Index.ANALYZED));
doc.add(new Field("cell", rs.getString("cell"), Field.Store.YES,
Field.Index.ANALYZED));
就是通过一个关键字搜索contents,roomid,address,cell这四个域呢
下面只是搜索contents// 搜索条件
QueryParser parser = new QueryParser(Version.LUCENE_43, "contents", new IKAnalyzer(true) );
Query query = parser.parse(s); Lucene 索引 搜索 Java
[解决办法]
BooleanQuery query = new BooleanQuery();
query.add(new QueryParser(Version.LUCENE_43, "contents", new IKAnalyzer(true)).parse(s), BooleanClause.Occur.SHOULD);
query.add(new QueryParser(Version.LUCENE_43, "roomid", new IKAnalyzer(true)).parse(s), BooleanClause.Occur.SHOULD);
query.add(new QueryParser(Version.LUCENE_43, "address", new IKAnalyzer(true)).parse(s), BooleanClause.Occur.SHOULD);
query.add(new QueryParser(Version.LUCENE_43, "cell", new IKAnalyzer(true)).parse(s), BooleanClause.Occur.SHOULD);
[解决办法]
你要用MultipleIndex 然后传入需要查询所有的一个地址列表,综合搜索
[解决办法]
或者
1. 你把所有的 需要一起查询的 feild 放在一起,构成一个新的域。solr 的copy feild 就是这样做来支持你这样的需求的。副作用就是索引文件增大1倍。空间换时间
2. 自己对每个域单独搜索再合并结果。不会增加空间,但时间会消耗