Jellyfin Forum
JellySearch - Printable Version

+- Jellyfin Forum (https://forum.jellyfin.org)
+-- Forum: Development (https://forum.jellyfin.org/f-development)
+--- Forum: Plugin Development (https://forum.jellyfin.org/f-plugin-development)
+--- Thread: JellySearch (/t-jellysearch)

Pages: 1 2 3


JellySearch - keklol - 2024-08-16

[Image: icon.svg]

A fast full-text search proxy for Jellyfin

https://gitlab.com/DomiStyle/jellysearch

(I am not the author but this seems very interesting)


RE: JellySearch - jennystreaming - 2024-08-18

THAT IS CRAZY!

"On a large Jellyfin server this brings the search speed per request down from about 2 seconds to 1 - 150 milliseconds.
As an added bonus, the search is much less prone to not finding results because of typos and also supports searching across multiple fields, e.g. mr robot, how to train your dragon 2010, queen a night at the opera, brotherhood fullmetal, better cal sual all work."


RE: JellySearch - jennystreaming - 2024-08-18

This seem to be for Jellyfin? https://github.com/fredrikburmester/marlin-search


RE: JellySearch - Topomov - 2024-08-20

Looks awesome! Thanks for sharing. I'll give it a try.
Out of curiosity; would someone have an idea on why the author decided to make a plugin instead of pushing a contribution to the Jellyfin core?


RE: JellySearch - thornbill - 2024-08-20

It’s not even a plugin. It is a completely separate service. It would be nice if plugins could implement custom search functionality though.


RE: JellySearch - Topomov - 2024-08-20

(2024-08-20, 12:31 PM)thornbill Wrote: It’s not even a plugin. It is a completely separate service. It would be nice if plugins could implement custom search functionality though.

A plugin would have indeed saved me a headache today.

My setup runs on a Synology which reverse proxy (nginx) as far as I know does not allow to easily add routing rules in a docker compose. It's most likely my fault; I failed to fully get it working on my setup. But from what I saw using the Meilisearch interface; it is damn fast even with 200k items! Hats off to Dominik, I saw some of his messages on the projet's Github, he's been planning this a long time ago.


RE: JellySearch - xiNe - 2024-08-20

(2024-08-20, 05:54 PM)Topomov Wrote:
(2024-08-20, 12:31 PM)thornbill Wrote: It’s not even a plugin. It is a completely separate service. It would be nice if plugins could implement custom search functionality though.

A plugin would have indeed saved me a headache today.

My setup runs on a Synology which reverse proxy (nginx) as far as I know does not allow to easily add routing rules in a docker compose. It's most likely my fault; I failed to fully get it working on my setup. But from what I saw using the Meilisearch interface; it is damn fast even with 200k items! Hats off to Dominik, I saw some of his messages on the projet's Github, he's been planning this a long time ago.

same here, running jellyfin on my synology nas which limited by its funtionality and not able to use this...Slightly-frowning-face


RE: JellySearch - domi - 2024-08-21

(2024-08-20, 05:54 PM)Topomov Wrote:
(2024-08-20, 12:31 PM)thornbill Wrote: It’s not even a plugin. It is a completely separate service. It would be nice if plugins could implement custom search functionality though.

A plugin would have indeed saved me a headache today.

My setup runs on a Synology which reverse proxy (nginx) as far as I know does not allow to easily add routing rules in a docker compose. It's most likely my fault; I failed to fully get it working on my setup. But from what I saw using the Meilisearch interface; it is damn fast even with 200k items! Hats off to Dominik, I saw some of his messages on the projet's Github, he's been planning this a long time ago.

(2024-08-20, 07:18 PM)xiNe Wrote:
(2024-08-20, 05:54 PM)Topomov Wrote:
(2024-08-20, 12:31 PM)thornbill Wrote: It’s not even a plugin. It is a completely separate service. It would be nice if plugins could implement custom search functionality though.

A plugin would have indeed saved me a headache today.

My setup runs on a Synology which reverse proxy (nginx) as far as I know does not allow to easily add routing rules in a docker compose. It's most likely my fault; I failed to fully get it working on my setup. But from what I saw using the Meilisearch interface; it is damn fast even with 200k items! Hats off to Dominik, I saw some of his messages on the projet's Github, he's been planning this a long time ago.

same here, running jellyfin on my synology nas which limited by its funtionality and not able to use this...Slightly-frowning-face

Is it possible to add custom nginx config files on Synology?

While not possible to add the rules in docker-compose, I can write a nginx config which separates the requests between Jellyfin and JellySearch.


RE: JellySearch - Topomov - 2024-08-21

(2024-08-21, 08:06 AM)domi Wrote: Is it possible to add custom nginx config files on Synology?

While not possible to add the rules in docker-compose, I can write a nginx config which separates the requests between Jellyfin and JellySearch.

It should be possible! Althought not documented. I'm not very comfortable with it but I ended up with the following:

Code:
server {
    location / {
        if ($request_uri ~* "^/Genres") {
            return 403;
        }

        if ($arg_searchTerm ~* ".+") {
            proxy_pass http://127.0.0.1:5500;
            break;
        }

        if ($arg_SearchTerm ~* ".+") {
            proxy_pass http://127.0.0.1:5500;
            break;
        }

        return 404;
    }
}

Here is the docker config that I used. As you can see; I added ports to be able to access the Meilisearch interface; which worked great.

Code:
version: '3.5'
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    network_mode: 'host'
    volumes:
#my volumes
    restart: 'unless-stopped'

  jellysearch:
    image: domistyle/jellysearch
    restart: unless-stopped
    volumes:
      - myPathToConfig:/config:ro
    ports:
      - "5500:5000"
    environment:
      MEILI_URL: "http://192.168.1.22:7700"
      MEILI_MASTER_KEY: "1234"
      INDEX_CRON: "0 0 0/2 ? * * *"
  meilisearch:
    image: getmeili/meilisearch:v1.9
    restart: unless-stopped
    ports:
      - "7700:7700"
    volumes:
      - myPathToMeilisearch:/meili_data
    environment:
      MEILI_MASTER_KEY: "1234"

The rest of my message is just my attempts are getting it to work. You can probably ignore it.

Do you know if it's normal that the following request: http://192.168.1.22:5500/Users/SOMEID/Items?searchTerm=Bond&Limit=100&Fields=PrimaryImageAspectRatio,CanDelete,MediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&IncludeItemTypes=Movie

Returns the following? {"Items": [], "TotalRecordCount": 0, "StartIndex": 0}

I tried to take the request sent to Jellyfin and send it to Jellysearch. But I guess I am missing some header authentification (according to the Jellysearch logs)


Nonetheless, wherever we get it to work or not. Thank you for your work! It's been really fun to try and it's great to see people involved in the project.


RE: JellySearch - domi - 2024-08-22

Try adding the following location block above your regular Jellyfin location block:

Quote:location ~* ^(?!/Genres)(.*) {
    if ($arg_searchTerm) {
        proxy_pass http://jellysearch:5000;
        break;
    }
}

Where http://jellysearch:5000 is your host where JellySearch is running.

(2024-08-21, 06:45 PM)Topomov Wrote: Do you know if it's normal that the following request: http://192.168.1.22:5500/Users/SOMEID/Items?searchTerm=Bond&Limit=100&Fields=PrimaryImageAspectRatio,CanDelete,MediaSourceCount&Recursive=true&EnableTotalRecordCount=false&ImageTypeLimit=1&IncludePeople=false&IncludeMedia=true&IncludeGenres=false&IncludeStudios=false&IncludeArtists=false&IncludeItemTypes=Movie

Returns the following? {"Items": [], "TotalRecordCount": 0, "StartIndex": 0}

Yes, all authentication is done by Jellyfin. Since I'm not sending any request when no results are found I just return an empty result no matter if the authentication failed or there are no results so I don't leak any data. You will have to set the Authorization header in order for Jellyfin to respond.