4

私はelasticsearchが初めてなので、親切にしてください。

N個のタグでタグ付けされたデータを保存してクエリしようとしています。検索クエリの配列と保存されている配列を比較し、最もタグに一致する項目の順に結果を返したいと考えています。

データセットの例:

{ name: "karl", tags: ["terrible", "programmer"] }
{ name: "bob", tags: ["awesome", "programmer"] }

両方の人に一致するクエリの例:

query: { tags: ["programmer"] }
result: [karl, bob]

この例では、両方が返されますが、より多くのタグが一致したため、bob のスコアが高く、一致していないにもかかわらず、Karl がまだ表示されていawesomeます。

query: { tags: ["programmer", "awesome"] }
result: [bob, karl]

私が持っているクローゼットはこれですが、カールよりもボブのスコアが高いようには見えません

{
  "query": {
    "bool": {
      "should": [
        { "match": { "tags": "programmer" } },
        { "match": { "tags": "awesome" } }
       ],
      "minimum_number_should_match": 1
    }
  }
}

いくつかのサポートが大好きです:-)ありがとう!

4

2 に答える 2

0

両方 (またはそれ以上) のタグに一致するドキュメントのみが必要な場合は、must クエリ ( https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl- bool-query.html ) クエリは次のようになります。

{
  "query": {
    "bool": {
      "must": [
        { "match": { "tags": "programmer" } },
        { "match": { "tags": "awesome" } }
       ]
    }
  }
}
于 2020-04-03T14:18:06.850 に答える