2017-07-27 3 views
1

私はMySQLの中で次の構造を有する:ElasticSearchいくつかの検索例

  1. 表グループ - idtitleuser_id
  2. 表のキーワード - idを、title
  3. 表のgroup_keyword - group_idkeyword_id

5件の検索で検索します:

    グループのタイトル
  1. 全試合title = "keyword"
  2. キーワードのタイトル完全一致title = "keyword"
  3. グループのタイトル
  4. 部分一致title like "keyword%"
  5. グループのタイトル部分一致title like "%keyword%"
  6. キーワードのタイトル部分一致title like "%keyword%"

これらのクエリは、1つのクエリにまとめられます。サブクエリごとに、並べ替えが行われるpriorityという列が追加されます。

質問:上記のケースを実行するためにElasticSearchを設定する方法、または結果を得るためにElasticにクエリを作成する方法を教えてください。私は、このクエリはMysqlで非常に遅いので、多くの最適化、追加されたインデックス、分割テーブルなどを行ったので、すべての最適化結果は一時的です。

ありがとうございました

答えて

0

キーワードフィールドを分析しますか? 異なる5つのケースが必要ですか?

必要なクエリの種類を設定する必要があります。

ワイルドカードクエリので:キーワードサブ用語はトークン化されていないことを意味し、ESは、分割defaltアナライザを使用してキーワード属性を検索してもhttps://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

は非分析したフィールドに対して(すべての5例の検索を管理しますカスタムアナライザーを指定しない限り、単純な空白を使用して単語を入力します)。

あなたはより柔軟な何かをしたいとパフォーマンスが問題(解析属性)を使用すると、nグラム分析を使用することができない場合:この1つは、それが依存する複数の文字でそれを壊す意味し、あなたのサブ用語をトークン化https://www.elastic.co/guide/en/elasticsearch/reference/5.5/analysis-ngram-tokenizer.html

あなたのngram設定で。

もちろんそれぞれの場合のanlyser指定する必要がありますあなたの文書のマッピング:

ワイルドカードを研究==> not_analyzed

nグラム研究==> nグラム

PS:ESのドキュメントを閲覧しながら、注意を払います。 ESバージョン仕様は、バージョン間で多くの減価償却費がかかるため、非常に重要です。右側のインストールのメジャーバージョンを選択し、次にブラウズします。

関連する問題