$30 off During Our Annual Pro Sale. View Details »

searchnos について

searchnos について

Yoji Shidara

March 10, 2023
Tweet

More Decks by Yoji Shidara

Other Decks in Technology

Transcript

  1. searchnos
    について
    npub1q7qyk7rvdga5qzmmyrvmlj29qd0n45snmfuhkrzsj4rk0sm4c4psvqwt9c
    2023-03-10 Nostr
    勉強会 #1

    View Slide

  2. @darashi
    nostrbuzzs
    の作者です。

    View Slide

  3. searchnos
    とは
    https://github.com/darashi/searchnos
    Nostrbuzzs
    に検索機能がほしい、けど...
    NIP-50 (Search Capability;
    検索)
    対応のリレーが少ないので、自分で作ってみまし
    た。
    リレー風のサーバですが、フル機能のリレーではありません。

    View Slide

  4. View Slide

  5. 考えたこと
    リレーを自前で作るのは大変そう
    現状でも既に大変そう
    今後の NIP
    に対応し続けるのも大変そう
    リレーを自前で運用するのも大変そう
    ユーザのリレーリストに追加してもらい、こちらにイベントを投げてもらわ
    ないといけない。
    そのレベルのものを運用するのは大変そう。

    イベントは既存のリレーから取得するのがよさそう。小判鮫的な。

    View Slide

  6. しくみ
    searchnos
    indexer searcher
    relay-1
    relay-2
    Elasticsearch
    web-browser

    View Slide

  7. indexer
    指定したリレーに接続し、kind1
    とkind5
    を購読する。イベントに応じて Elasticsearch
    の状態を更新する。
    searcher
    REQ
    が来たら、
    Elasticsearch
    にクエリを投げて、結果を返し、最後にEOSE
    を送る。
    (内部的な)クエリ購読者リストに追加する。
    一定時間ごとにポーリング
    購読者があるクエリを順番に Elasticsearch
    に投げて、新着の結果を購読者に
    流す。

    View Slide

  8. client
    searcher Elasticsearch indexer relay
    loop
    loop
    REQ w/"search"
    1
    query
    2
    response
    3
    EVENT (if matched)
    4
    EVENT (if matched)
    5
    EOSE
    6
    kind:1
    7
    index request
    8
    wait
    9
    query
    10
    response
    11
    EVENT (if matched & unread)
    12
    CLOSE
    13
    client
    searcher Elasticsearch indexer relay

    View Slide

  9. おもしろポイント
    同じクエリを購読しているクライアントのクエリは、一つにまとめて
    Elasticsearch
    に投げる。
    buzzphrases
    に関していうと、何人もが同じクエリを購読することがよくあ
    る。
    Simple query string query ※
    を使っているので、複雑な条件を持つ検索ができる
    ※ https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-
    query-string-query.html

    View Slide

  10. まとめ
    既存のリレーから note
    を収集し、 NIP-50
    に対応した検索機能を提供するリレー
    っぽいサーバーを作った。

    View Slide

  11. 今後の課題
    通常のフィルタ条件 (NIP-01)
    に対応する。
    現状 limit
    にしか対応できていない
    kind:0 (NIP-01)
    にも対応する...?
    購読者の多いクエリは頻繁にポーリングするなど、もう少し賢いクエリスケジュ
    ーリング。
    言語推定と言語によるフィルタリングに対応する...?
    spam
    フィルタに対応する...?
    どうやって...?
    NIP-56
    があるので、信頼できるユーザの pubkey
    を定義して、その kind:1984
    から spam
    フィルタを学習する、とかはありかもしれない。
    運用が大変そう...

    View Slide