Saturday, January 7, 2012

Combining the power of Hibernate Search and Solr

For people working with Hibernate to manage their objects' persistence, Hibernate search is a real savior. After trying to develop similar functionality (collecting all objects changes and sending them to a full text search engine upon transaction commit) you find out pretty fast that there are lots of pitfalls out there.
On the other hand Solr has some significant advantages (like 1:m facets if you need it) which make it a better decision on some scenarios.
Since Hibernate Search is written in a very extendable way, it turns out there is an easy option to combine both together. This way you get Hibernate Search to do all the Hibernate monitoring hard work and collecting all changes, while you can use Solr to do all searches and faceting work.
By configuring Hibernate Search default worker backend with the "hibernate.search.default.worker.backend" configuration parameter ( or by configuring Hibernate Search to forward all changes through JMS) you can catch all changes in a very convenient format and forward them to Solr using the SolrJ client interface.
Although in most scenarios you will probably prefer working with Hibernate search for both updates and queries, if for some reason you need Solr and you use Hibernate, you can still get a lot from Hibernate search.
You can build a system in a very short time where FTS fields are annotated using Hibernate Search annotations and all updates end up in the Solr server. Then you can use Solr for queries and configure it to return only the IDs of the relevant documents / objects. Afterwards you can use the Ids list with hibernate to translate the list to hibernate objects.
Any comments / inputs are always welcomed...
If you are intrested I've written a small example which shows the main concepts at:
https://github.com/avner-levy/hibernate_search_solr_integration

    Avner

39 comments:

  1. I am trying to use your example code but without spring, and it's just not working, I need to integrate a plain hibernate jpa module and the solr adpater/integrator (HibernateSearchSolrWorkerBackend) is never triggered, do you have an example of what you have to put in the persistence xml?

    ReplyDelete
    Replies
    1. Since I'm working with spring I don't have such example but these are regular hibernate properties so there should be enough examples on the net.

      Delete
  2. Yeah I think you were right, my problem was that I am using an older version of jpa and hibernate-search.. so your code example doesn't work for me because the interface of the custom back-end worker is completely different (BackendQueueProcessorFactory for hibernate-search 3.1.1GA).

    ReplyDelete
  3. Thanks for the comment! It is always good to know it was helpful for someone.

    ReplyDelete
  4. Enjoyed your approach to explaining how it works, hope to see more blog posts from you. thank you!

    Hibernate Online Training | Java Online Training


    Hibernate Training in Chennai Java Training in Chennai

    ReplyDelete
  5. Hibernate Online Training Hibernate Online Training

    Java Online Training Java Online Training Java Online Training Java Online Training Java Online Training

    ReplyDelete
  6. I read this post two times, I like it so much, please try to keep posting & Let me introduce other material that may be good for our community.
    Devops Training courses
    python Training in chennai
    Devops Training in Bangalore

    ReplyDelete
  7. I was recommended this web site by means of my cousin.
    I am now not certain whether this post is written through him as nobody else recognise such precise about my difficulty. You're amazing! Thank you!

    selenium training in Chennai
    selenium training in Tambaram
    selenium training in Velachery
    selenium training in Omr
    selenium training in Annanagar


    After reading this web site I am very satisfied simply because this site is providing comprehensive knowledge for you to audience.
    Thank you to the perform as well as discuss anything incredibly important in my opinion. We loose time waiting for your next article writing in addition to I beg one to get back to pay a visit to our website in

    ReplyDelete
  8. You got an extremely helpful website I actually have been here reading for regarding an hour. I’m an initiate and your success is incredibly a lot of a concept on behalf of me.
    Python Online training
    python Course institute in Chennai
    Python Course institute in Bangalore

    ReplyDelete
  9. Es fácil ganarse una confianza que( tam san be tong sieu nhe ) es fácil de destruir, es ( Sàn panel Đức Lâm ) importante no engañar a los grandes( tấm bê tông siêu nhẹ ) o pequeños, pero el engaño ha sido el problema

    ReplyDelete
  10. Card màn hình cũ là một trong những linh kiện không thể thiếu của một máy tính để bàn trọn bộ. Một màn hình máy tính có kèm theo bộ card màn hình cũ sẽ giúp cho máy tính để bàn cho ra hình ảnh sắc nét hơn. Tuy nhiên card màn hình cũ cũng giống như hầu hết các linh kiện máy tính chúng đều cần vệ sinh định kỳ và sử dụng đúng cách.

    Thông tin bài viết này chúng tôi sẽ chia sẻ tới bạn cách vệ sinh card màn hình cũ của máy tính để bàn. Mời bạn tham khảo để có thông tin cho mình nhé

    Hướng dẫn cách vệ sinh card màn hình cũ của máy tính để bàn

    ReplyDelete
  11. Thanks for all your Blogs,Appreciating for this Effective work and keep doing more...Learn Python to get a enormous impact in your Feature
    python training in chennai | python training in annanagar | python training in omr | python training in porur | python training in tambaram | python training in velachery

    ReplyDelete
  12. Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It’s always nice when you can not only be informed, but also entertained!sahre more details guys
    Ai & Artificial Intelligence Course in Chennai
    PHP Training in Chennai
    Ethical Hacking Course in Chennai Blue Prism Training in Chennai
    UiPath Training in Chennai

    ReplyDelete
  13. d Post! , it was so good to read and useful to improve my knowledge as an updated one, keep blogging.After seeing your article I want to say that also a well-written article with some very good information which is very useful for the readers....thanks for sharingsalesforce training in chennai

    software testing training in chennai

    robotic process automation rpa training in chennai

    blockchain training in chennai

    devops training in chennai

    ReplyDelete
  14. With today's modern society, the demanding needs of people are increasing. Not only beauty, eating and playing, but choosing a child's bedroom also requires a lot of factors. Because the bedroom is a place to rest, relax, study and sometimes also play a place for your baby. More: Phòng ngủ trẻ em, Giường tầng bé traiNội thất trẻ em

    ReplyDelete
  15. She skill class project quickly. Recent safe baby art close natural. Me during strategy record matter public.world-news

    ReplyDelete