问题描述
FullTextSessionfullTextSession=Search.getFullTextSession(getSession());SearchFactorysearchFactory=fullTextSession.getSearchFactory();QueryBuilderuserQB=searchFactory.buildQueryBuilder().forEntity(AUserInfo.class).get();QueryBuildercompQB=searchFactory.buildQueryBuilder().forEntity(Company.class).get();//org.apache.lucene.search.QueryQueryuserQuery=userQB.keyword().fuzzy().onField("content").matching(q).createQuery();QuerycompQuery=compQB.keyword().fuzzy().onField("company_name").matching(q).createQuery();BooleanQuerybooleanQuery=newBooleanQuery();booleanQuery.add(userQuery,Occur.SHOULD);booleanQuery.add(compQuery,Occur.SHOULD);FullTextQueryfullTextQuery=fullTextSession.createFullTextQuery(booleanQuery,AUserInfo.class,Company.class);@SuppressWarnings("unchecked")List<Object>useList=fullTextQuery.list();for(Objectobj:useList){System.out.println(obj);}
Company[id=36,company_name=IBM,company_address=beijing]Company[id=34,company_name=IBM-c,company_address=beijing]UserInfo[id=67,city=it'sstony,content=IBM]UserInfo[id=63,city=it'sstony,content=IBMChina]UserInfo[id=68,city=it'sstony,content=JavaIBM]UserInfo[id=65,city=it'sstony,content=JavaIBMAChina]UserInfo[id=64,city=it'sstony,content=JavaIBMChina]UserInfo[id=66,city=it'sstony,content=JavaIBM-China]UserInfo[id=69,city=it'sstony,content=IBM-c]
代码和输出结果如上所示,请问各位接触过的给我一点指点,返回的useList为何不能遵循查询结果,输出的永远是按照Entity类别来排序,比如这个例子中Company在前,而AUserInfo在后,实际情况AUserInfo有个别的实例匹配搜索关键字的得分还高些,我希望这个List里面放的Entity主要是按照关键字匹配度来排序,而不是先按照类别排序,然后类别里再看匹配度排序。
解决方案
本帖最后由 wllove23 于 2014-01-10 15:50:54 编辑
解决方案二:
为什么要把两个查询交织在一起做呢?
解决方案三:
引用1楼panzhixiong_cn的回复:
为什么要把两个查询交织在一起做呢?
就是要查询所有的带有IBM关键字的消息
解决方案四:
引用2楼wllove23的回复:
Quote: 引用1楼panzhixiong_cn的回复:
为什么要把两个查询交织在一起做呢?就是要查询所有的带有IBM关键字的消息
你是在做搜索引擎吗?
解决方案五:
解决方案六:
楼主,这个问题解决了吗?