Compass入门问题:怎样查询多个表?(返回结果怎么处理)

发布于 2021-11-21 15:10:31 字数 99 浏览 800 评论 15

刚开始使用Compass,所以请教下各位:如果我要根据用户输入的关键字,去查找多张表,我该怎么处理(也就是,最后的查询结果的返回值,包括对象的入参出参)?

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(15

眼眸里的那抹悲凉 2021-11-25 19:45:06

不是的,toString之后,得到的是一个包含类名的字符串,因此通过这个字符串便可以判断是哪个类的索引了

剑心龙吟 2021-11-25 19:45:06

你指的是hits.data(i).getClass().equals(Object.class);这种方式吧?

一人独醉 2021-11-25 19:45:06

您好,compass+lucene你后来是如何做到全表查询的呢?我目前也有这个需求

2021-11-25 19:45:06

回复
数据库建立多表连接的视图,然后把视图映射成hibernate实体,查询就用compass查询这个实体

够钟 2021-11-25 19:45:06

你怎么解决的

好听的两个字的网名 2021-11-25 19:45:01

其实通过反射机制来判断也可以行得通,目前我碰到一个问题,在查询中文关键字的时候,总结果记录数获取了,但是在取相应的字段的时候却报NULLPOINTEXCEPTION,请问这什么问题,(分词字段都处理过,如果NULL活着“”全部赋值为“ ”)

蓝颜夕 2021-11-25 19:44:52

这个字段存储到索引里面去了吗?

惜醉颜 2021-11-25 19:37:04

一语道破天机,没有设置Store.YES!tks!

最偏执的依靠 2021-11-25 19:33:36

hits.data(i),toString(),你会发现玄机的,我也刚解决这个问题

把回忆走一遍 2021-11-25 19:10:15

嗯,问题是我在获取结果集的时候,我怎么区分这个是哪个对象的结果:

//CompassHits hits = session.find(q); // 相当于结果集

   //这个我原本以为可以区分结果对象,但debug后并不是这样的
    if (hits.equals(Article.class)) {
     Article article = (Article) hits.data(i);
     article.setaTitle(highLighter.fragment("atitle", article
       .getaTitle()));
     article.setaContent(highLighter.fragment("aContent",
       article.getaContent()));
     System.out.println("查询结果Article:" + article.getaTitle());
    } else if (hits.equals(Author.class)) {
     Author author = (Author) hits.data(i);
     author.setaName(highLighter.fragment("aName", author
       .getaName()));
     author.setaContent(highLighter.fragment("aContent", author
       .getaContent()));
     System.out.println("查询结果:" + author.getaName());
     System.out.println("查询结果:" + author.getaContent());
    }

鹤舞 2021-11-25 18:41:11

你说的这种肯定是不行的,你只能是自己去检索多个bean,然后自己进行结果集的合并。

策马西风 2021-11-25 17:58:06

我明白你的意思:你是说比如有个Article Bean ,另外有一个 Author Bean 这个必须建立两张表的关联关系,然后在查询的结果,只要有其中一个对象,就直接可以获取另外一个对象,这实际还是Hibernate的映射法则。我现在的需求是:多张表之间毫无关系,但是我要通过同一个关键字去检索这些表,然后返回一个结果集,供我在页面遍历

归途 2021-11-25 06:41:57

坚持使用 Compass 的后果就是得不到社区的支持,因为多数人不用它了。

不过你说的查询多张表,在 Hibernate Search 上必须做 Bean 的关联

臻嫒无言 2021-11-23 21:04:36

额,我知道Compass已经年久失修了,使用的是2.4的Lucene,并不兼容3.0后的Lucene,但是Compass从一个传统的java程序员来说,还是挺好的,目前有一个项目,已经确定使用Compass,所以从时间来说,使用Hibernate的Search已经不太现实

无声静候 2021-11-22 16:50:13

刚开始使用 Compass 我劝你还是换了吧, Compass 已经多年未更新,改用
Hibernate Search 吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文