1

ゲーム用の検索エンジンを構築しています (path of exile)。このゲームでは、アイテムにはソケットがあります。

  • アイテムは 0 から 6 のソケットを持つことができます
  • 一部のソケットはリンク可能
  • ソケットは3種類(赤・緑・青)
  • 3 つのソケットがリンクされている場合 (たとえば)、最も近いソケットだけでなく、すべてが相互にリンクされていると見なされます。

5 つのリンクされたソケットと 1 つの孤独な 6 番目のソケットを持つアイテムの例。

私の目標は、ユーザーが特定のソケットの色と ElasticSearch とのリンクを持つアイテムを検索できるようにすることです。

ユーザーはソケットの組み合わせを次のように説明します。

「RRRBB」は赤3個、青2個のソケットが5個連結した商品になります。「GGG RB」には、3 つの緑のソケットがリンクされ、1 つの赤と 1 つの青のソケットがリンクされます。

まだフォローしていますか?

アイテムにインデックスを付けるとき、リンクされたソケットをアルファベット順およびグループ サイズ (グループ サイズは必要ない場合があります) で並べます。「RB GGB」は「BGG RB」になります。

そして、検索を行う前に、同じ方法でユーザー入力を並べ替えます。

したがって、正確な組み合わせを検索するのは非常に簡単で高速です(?)。データを分析する必要すらありませんよね?

しかし、これらのシナリオが機能することを望みます:

「ggg」は「ggg rb」を検索します -> これは空白アナライザーだけで簡単ですか?

しかし、私が苦労しているのは次のとおりです。

"brr* r b" は "bgrr r b" と一致します -> 私が現在行っている方法: グループに * があるとすぐに、すべてのサブグループの間に * を追加するので、次のように検索します: b g* r b . うまくいきますが、本当に非効率だと思いますよね?(最初と最後の文字が B または R の場合、最初と最後の * を削除するなどの小さな最適化を行っても)。

これを可能かつ高速にするために、データ(アナライザー、文字列または用語など)にインデックスを付ける方法についてのアイデアはありますか?

終わり。

4

0 に答える 0