首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

lucene搜索输入一个关键字,怎么匹配多个索引field

2013-09-11 
lucene搜索输入一个关键字,如何匹配多个索引field索引代码如下 Document doc new Document()doc.add(ne

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. 自己对每个域单独搜索再合并结果。不会增加空间,但时间会消耗

热点排行