关于hibernate search搜索多个实体记录的问题

问题描述

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关键字的消息

你是在做搜索引擎吗?
解决方案五:

解决方案六:
楼主,这个问题解决了吗?

时间: 2024-10-21 07:36:37

关于hibernate search搜索多个实体记录的问题的相关文章

在 Hibernate Search 5.5 中对搜索结果进行排序

"秩序,秩序"- 有时不仅仅下议院尊敬的议员需要被喊着让排序,而且在特殊情况下 Hibernate 的查询结果也需要排序. 就像这样,仅仅通过一个 Sort 对象在全文本查询执行之前,对特殊的属性进行排序. FullTextSession session = ...; QueryParser queryParser = ...; FullTextQuery query = session.createFullTextQuery( queryParser.parse( "sum

基于lucene搜索引擎的Hibernate Search,官方文档翻译

由于自己的项目需要用到搜索引擎,于是想到使用lucene,封装了lucene的框架有compass,solr,hibernate search. 网上对这些框架的描述有: Compass:是在Lucene的基础上做了封装,支持索引事务控制和增量索引,同时也能够和主流的SSH框架完美地整合在一起,操作Compass类似于操作Hibernate,它们的类/方法等设计的非常相似. 项目主页:http://www.compass-project.org/ 该项目已经很久没有更新维护了,官方网站显示最后维

hibernate Search 继续研究 增加 hibernate memcache 二级缓存 配置成功 附件maven代码(2)

首先安装 memecached 服务端:   之前写过的 文章,centos 安装memcached服务 :   http://toeo.iteye.com/blog/1240607   然后 在 前几天的 弄的  hibernate search 基础上,再添加 memcached 缓存.   因为 hibernate search 虽然 建立了索引.查询速度快了..但是依然要 load 数据.   证据就是 可以看到搜索如果有结果  肯定会执行 hql 将数据一次都查询出来.   Hiber

hibernate Search 学习研究 附件是maven工程

  Jboss 的 hibernate search 支持 hibernate 应该比较好.   所以想在项目 里面使用 hibernate search 进行 搜索.   分词使用的是 IKAnalyzer    网站是 :   http://code.google.com/p/ik-analyzer/   使用的 是 hibernate 3.6.8 + spring 3.0.6 + hibernate search 3.4.1 +IKAnalyzer 3.2.8    数据库是mysql  

多点触摸-hibernate search 可不可以实现多个索引目录联合查询

问题描述 hibernate search 可不可以实现多个索引目录联合查询 hibernate search 是基于Lucene的 ,而Lucene 是有现成的方法,可以直接实现多个索引目录查询 ,但是hibernate search 一直不知道该如何实现 ,求大神指点

表B的主键是表A的外键,用hibernate怎么生成相应的实体类和映射文件呢?

问题描述 有两张表A,B,表B的主键是表A的外键,用hibernate怎么生成相应的实体类和映射文件呢? 解决方案 解决方案二: 解决方案三:搜下hibernate@OneToMany或者@ManyToOne用注释比较方便解决方案四:引用2楼u012895467的回复: 搜下hibernate@OneToMany或者@ManyToOne用注释比较方便 在实体类A中有个表示表中主键成员变量deelid,在实体类B中有个privateAa;在表B中的主键字段是deelid,且是表A中字段deelid

Spring怎样整合Hibernate Search?

问题描述 Spring.xml<!--......--><beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="mappingReso

hibernate search的使用问题

问题描述 QueryfullTextQuery=fts.createFullTextQuery(luceneQuery,Commodity.class);fullTextQuery.list();总是取不出值是为什么呢,POJO也都用annotations注释了我使用了spring,hibernate和hibernatesearch:给点问题出现的可能性就行 解决方案 解决方案二:是不是你在配注解的时候配错了?解决方案三:@Indexed(index="cy")publicclassC

hibernate 多对多删除 中间表记录还在

问题描述 请问一下hibernate 多对多删除一方的记录的时候,为什么中间表的记录没有跟着删除呢,但是我在存入的时候,中间表记录就自动生成了啊 问题补充:UserGroup表private Set<Paper> papers = new HashSet<Paper>();@ManyToMany@JoinTable(name="tm_paper_usergroup",joinColumns={@JoinColumn(name="usergroupid&