2017-06-17 9 views
0

私はelasticsearchの初心者で、私は自分の問題を解決することはできません。 はここに私の問題です:弾性検索複数のフィールド

{"email"=>"[email protected]", 
"full_name"=>"Lilla Fritz Ritchie", 
"location"=>"Connecticut", 
"postition"=>"Developer", 
"about"=> 
"Atque nihil dolorum et quod ea aut debitis. Aliquid commodi eos et architecto nostrum. Rerum aut sunt sed molestiae consequatur. Ut ut est id voluptatem maiores. Sed voluptate aut consequatur asperiores reprehenderit iure optio.", 
"skills"=> 
[{"name"=>"SQLServer", "year_experience"=>2}, 
    {"name"=>"MySQL", "year_experience"=>6}, 
    {"name"=>"Aps.net", "year_experience"=>7}, 
    {"name"=>"Ruby on Rails", "year_experience"=>8}, 
    {"name"=>"PHP", "year_experience"=>4}, 
    {"name"=>"Amazon EC2", "year_experience"=>4}], 
"id"=>3} 

これは、ES内のユーザー文書があり、私はスキルと年の経験を持つ、対応する人を見つける必要があります。 例:私の入力はRuby on Rails 8年の経験と5年間の経験を持つAmazon EC2のスキルです。

  • 年の経験によって、Amazon EC2のスキルと秩序を持って

    • 年の経験によってレールスキルや順序にルビーを持っている:

      =>は結果を期待しています。

    誰でも、私はそのケースのESクエリを書くことができます。私の悪い英語については申し訳ありません。

  • +0

    「私の入力はRuby on Rails 8年の経験であり、Amazon EC2のスキルは5年の経験です」というスキルを求めていると思います。 – user3775217

    答えて

    0

    あなたのマッピングを理解しているかどうかはわかりません。次の質問があなたの質問に答えることを願っています。

    { 
         "query": { 
          "filtered": { 
            "filter": 
             "bool": { 
              "term": { 
               "skills.name": "Ruby" 
              } 
             } 
            } 
          } 
         }, 
         "sort": { 
          "skills.year_experience": { 
            "order": "asc" 
          } 
         } 
        } 
    

    ソートが正しい順序でない場合にもdescascを変更することができます。

    0

    私はあなたのjsonドキュメントを見ました。まず、スキルデータタイプのnestedデータタイプを適用することをお勧めします。

    また、デフォルトでは空白での入力を壊す標準的なアナライザであるため、 "Ruby on Rails"は "ruby"、 "on"、 "rails"になり、standardアナライザはキーワードを小文字にするためのカスタムアナライザーを作成しない限り、逆インデックスの実際のフィールドを使用するか、または他の用途の検索をサポートするためにマッピングにmulti-fieldsを使用します。

    私はあなたの現在のユースケースが機能するための最小限のマッピングと設定を提供しました。これを拡張して、他のユースケースをサポートすることができます。

    また、nestedの弾性のクエリを見てみることをお勧めします。

    マッピング

    PUT index_playtime1 
    { 
        "settings": { 
         "analysis": { 
          "analyzer": { 
           "lowercase_keyword": { 
            "tokenizer": "keyword", 
            "filter": ["lowercase"] 
           } 
          } 
         } 
        }, 
        "mappings": { 
         "document_type": { 
          "properties": { 
           "skills": { 
            "type": "nested", 
            "properties": { 
             "name": { 
              "type": "text", 
              "analyzer": "lowercase_keyword" 
             } 
            } 
           } 
          } 
         } 
        } 
    } 
    

    クエリ

    POST index_playtime1/document_type/_search 
    
    
        { 
        "sort": { 
         "skills.year_experience": { 
          "order": "asc" 
         } 
        }, 
        "query": { 
         "bool": { 
          "must": [{ 
            "nested": { 
             "path": "skills", 
             "query": { 
              "bool": { 
               "must": [{ 
                "bool": { 
                 "must": [{ 
                   "term": { 
                    "skills.name": { 
                     "value": "ruby on rails" 
                    } 
                   } 
                  }, 
                  { 
                   "term": { 
                    "skills.year_experience": { 
                     "value": 8 
                    } 
                   } 
                  } 
                 ] 
                } 
               }] 
              } 
             } 
            } 
           }, 
           { 
            "nested": { 
             "path": "skills", 
             "query": { 
              "bool": { 
               "must": [{ 
                "bool": { 
                 "must": [{ 
                   "term": { 
                    "skills.name": { 
                     "value": "amazon ec2" 
                    } 
                   } 
                  }, 
                  { 
                   "term": { 
                    "skills.year_experience": { 
                     "value": 4 
                    } 
                   } 
                  } 
                 ] 
                } 
               }] 
              } 
             } 
            } 
           } 
          ] 
         } 
        } 
    } 
    

    ・ホープ、このことができます。

    これがスイートではない場合には、あなたの使用法をお知らせください。

    関連する問題