1

多くのTAGSを持つことができるPOSTSがあります。クエリで、一意のタグを持つPOSTSのみを返し、その他のタグを返さないことを望んでいます。例えば。

posts: [
  {  id: 1
     tags: [hello, world]
     ...
  }
  {  id: 2
     tags: [hello]
  }
]

以下:

search?q=tag:こんにちは

のみを返す必要があります:

posts: [
  {  id: 2
     tags: [hello]
  }
]

弾性検索を使用してこれを達成するにはどうすればよいですか?

4

1 に答える 1

1

Elasticsearch は、逆インデックスである lucene を下に使用します。大まかに言えば、用語にインデックスを付け、用語に基づいてドキュメントを照会できるようにします。用語を検索すると、もちろん、その用語を含むドキュメントが返されます。タグも用語なので、ロジックは同じです。その用語のみを含むドキュメントを返すように lucene に指示する方法、または他の用語を含むすべてのドキュメントを除外するように指示する方法がわかりません。

タグをまとめて単一の値で送信し、そのフィールドのマッピングを に設定することで、目的を達成できます"index" : "not_analyzed"。このようにして、関連するすべてのタグを含む、ドキュメントごとに 1 つのタグ用語をインデックス化します。特定のタグを検索すると、その特定のタグのみを含むドキュメントが返されます。一方、ドキュメントに複数のタグがある場合、そのドキュメントを取得するには、それらすべてをまとめて検索する必要があります。あなたの要件は私には非常に奇妙に見えますが、それがこの方法で必要な場合は、それを実行できるはずです。

于 2012-10-03T20:12:22.523 に答える