7

弾性検索では、このフィルター

{
  "bool": {
    "must": {
      "term": {
        "article.title": "google"
      }
    }
  }
}

タイトルに「google」が含まれる記事を適切に返します。

でも、

{
  "bool": {
    "must": {
      "term": {
        "article.title": "google earth"
      }
    }
  }
}

タイトルに「google Earth」という正確な単語が含まれる記事があるにもかかわらず、結果が返されません。そうしてほしいです。

完全なクエリ:

{
  "size": 200,
  "filter": {
    "bool": {
      "must": {
        "term": {
          "article.title": "google maps"
        }
      }
    }
  },
  {
    "range": {
      "created_date": {
        "from": "2013-01-11T02:14:03.352Z"
      }
    }
  }]
}
}

ご覧のとおり、「クエリ」はありません。フィルター、サイズ、範囲だけです。それで、ElasticSearchがデフォルトのアナライザーを使用していると思います...?

私は何を誤解していますか?


編集:解決策を探している人のために、ここに私のフィルターがあります:

{
  "query": {
    "bool": {
      "must": {
        "must_match": {
          "article.title": "google earth"
        }
      }
    }
  }
}

(1) "query" で bool フィルターをラップし、(2) "term" を "must_match" に変更したノード。これにより、(記事を検索する "match" とは対照的に) フレーズ全体が一致します。グーグルアースの標準アナライザーでタイトル)。

完全なクエリは次のようになります。

{
  "size": 200,
  "filter": {
    "query": {
      "bool": {
        "must": {
          "must_match": {
            "article.title": "google earth"
          }
        }
      }
    }
  }
}

FWIW、(標準クエリを使用するのではなく) 「フィルター」フィールド内にこの条件を設定する理由は、「must_not」の代わりに「must_not」を使用したい場合があり、他の要素をクエリ。

4

4 に答える 4

11

正確な用語を検索するtermqueryを使用したため、Elasticsearch はアナライザーをまったく使用していません。

あなたのtitleフィールドは分析されます (特に指定しない限り)。したがって"google earth"、2 つの用語としてインデックスが作成されます["google","earth"]。そのため、termクエリは"google"機能しますが、termクエリは"google earth"機能しません。その EXACT 用語は存在しません。

match代わりにクエリを使用すると、検索前にクエリ用語が分析されます。

于 2013-02-10T09:44:17.640 に答える
0

最近これに出くわした人には、より簡潔な表現方法があることをお勧めします

{"query":{"bool":{"must":{"must_match":{"article.title":"google earth"}}}}}

と一緒です

{"query":{"match_phrase":{"article.title":"google earth"}}}
于 2015-05-06T04:26:42.160 に答える
0

Elasticsearch 5.4.2 を使用して、私のソリューションは次のように進化しました。

{"query": {
     "bool": {
         "must": {
             "match_phrase": {
                 "article.title": "google earth"}}}}}

これが誰かに役立つことを願っています。

于 2017-08-24T05:51:07.857 に答える
0

渡されたフレーズを爆発させることでこれを解決したので、変更するだけです。

{"bool":{"must":{"term":{"article.title":"google earth"}}}}

{"bool":{"must":{"term":{"article.title":["google", "earth"]}}}}

多くのクエリが実行されている場合は、きれいではなく、遅すぎるかもしれませんが、機能します。

注、「google」または「earth」のいずれかを含む結果も返されることがわかりました。

于 2015-06-01T14:03:53.357 に答える