1

自分のサイトに検索ページがあり、そこで名前フィールドを検索しています。完全一致だけでなく、ワイルドカードとあいまい一致も返す必要があります。ただし、完全一致はページの上部に表示される必要があるため、名前が完全一致、ワイルドカード一致、またはあいまい一致のいずれかであることを確認しようとしています。完全一致が最も高くなり、あいまい一致が最も低くなります。 . 提案により、私は dis_max クエリを使用しているため、名前フィールドごとに個別の dis_max があります。簡単にするために、以下のクエリ例には dis_max の 1 つだけを含めましたが、first_name も検索していると、「first_name」の「must」に 2 番目の dis_max が含まれます。

{
  "query": {
      "filtered": {
          "query": {
              "bool": {
                  "must": [
                      {
                          "dis_max": {
                              "queries": [
                                  {
                                      "match": {
                                          "last_name": {
                                              "type": "phrase",
                                              "query": "COTTER",
                                              "analyzer": "standard",
                                              "boost": 10000
                                          }
                                      }
                                  },
                                  {
                                      "query_string": {
                                          "query": "COTTER",
                                          "default_field": "last_name",
                                          "boost": 0.05
                                      }
                                  },
                                  {
                                      "match": {
                                          "last_name": {
                                              "query": "COTTER",
                                              "fuzziness": 2,
                                              "boost": 0.001,
                                              "analyzer": "standard",
                                              "fuzziness": 2,
                                              "prefix_length": 1
                                          }
                                      }
                                  }
                              ]
                          }
                      }
                  ]
              }
          }
      }
  }

問題は、ブーストが機能していないように見えることです。dis_max の 2 番目の 2 つのクエリを削除し、"Cotter" のフレーズ マッチのみを実行すると、last_name "Cotter" の結果が得られます。ただし、3 つのクエリをすべて使用すると、最初に得られる結果は「Carter」と「Carder」です。 0.001 で、完全一致のブーストは 10000 です。また、それぞれ値 0.1 と 1 を試しましたが、同じ結果が得られました...ブーストをどれだけ小さくしても大きくしても問題ないようです。

4

0 に答える 0