-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NEW] Connection of external search providers in spotlight #745
Comments
Just a few thoughts:
|
@geekgonecrazy I extended the description in the way we discussed it - at least I hope so. |
@geekgonecrazy any idea or reference implementation? |
Awesome! There are products out there that do one thing and one thing very well: Search. So it makes sense to be able to utilize them in large deployments for very fast search. Being able to register search providers similar to how roomtypes can be registered would be great. I like this model a lot. In an ideal world I think we would do:
As for the api sounds like we need active search provider to be able to receive events regarding the following:
Also needs to be able to provide settings that can be surfaced in the administration. It also needs a way to feed the search provider information on activation. Lets say I enable it on a server that is already active. Of course its great that it starts handling things from then on forward. But it also needs to be able to index existing content. So on enable I would imagine it needs to be provided rooms created, user membership and permissions. That's the bare minimum for it to function. From there new messages would be sent to it and it would index them. But then the big one... Messages sent prior to activation would need to be synced to it. Doing this one well could be difficult. Then of course the obvious one. We need to be able to call the search provider potentially with advanced search params (like limits) to actually get the data and surface in the UI. |
Also talked a bit with @karlprieb the search is currently planned to be implemented in the flex tab similar to how slack does. From my understanding we will be putting it in a more prominent spot at the top of the UI for faster and easier access |
@karlprieb The flex tab has got very limited space for visualizing search results. |
# Conflicts: # .meteor/packages # package-lock.json
…nk-local/0.63-assisitfy-chatpal
…nk-local/0.63-assisitfy-chatpal
…nk-local/0.63-assisitfy-chatpal
…nk-local/0.63-assisitfy-chatpal
…nk-local/0.63-assisitfy-chatpal # Conflicts: # .docker/Dockerfile # .sandstorm/sandstorm-pkgdef.capnp # .travis/snap.sh # HISTORY.md # package.json # packages/rocketchat-i18n/i18n/de-AT.i18n.json # packages/rocketchat-lib/rocketchat.info # packages/rocketchat-livechat/.app/i18n/de.i18n.json
…nk-local/0.63-assisitfy-chatpal
…dlink-gmbh/Rocket.Chat into redlink-local/#8381-search_provider_concept
…dlink-gmbh/Rocket.Chat into redlink-local/#8381-search_provider_concept
Motivation
Finding rooms based on message content is a requirement which has been around for quite a long time (see e. g. RocketChat/Rocket.Chat#1615). There is even an open PR RocketChat/Rocket.Chat#7628 . However, there are (and will always be) concerns with respect to performance and DB load.
When it comes down to searching huge installations, I believe there's no other way than using an external search engine. Replicating data to them is no issue as existing hooks already exist, but getting it integrated into the results is currently not possible.
In order to
Proposal for implementation
For flexibility reasons, a modular integration of configurable search providers shall be realized.
Since a database-connection cannot be assumed to be available, all replication shall be performed on the application layer (e. g. using http-requests).
RoomTypes
(see registry and the interface definition. The active search provider's interface methods shall be triggered explicitly from the rocket.chat runtime as alternative to (untyped) webhooks. Relevant events: Room created, message sent, user added/removed, permission changedTo be clarified: How to perform an initial load? Most probably, a dedicated Method triggering the proper interface methods for all existing objects is appropriate.
The text was updated successfully, but these errors were encountered: