2017-07-07 11 views
0

私は弾性検索バージョン2.xを使用しています。 弾性検索ソーティングとランキング

(「ニックネーム」、インデックス付き文書列として)

  • タイル壁のバスルーム(「ニックネーム」、インデックス付き文書列として)

    1. 浴室の壁のタイル:そして、私はとして索引付けされている2つのレコードを持っています私はフレーズ "タイルウォールバスルーム"を検索しようとしています。これは完全に一致し、その後3つの単語すべてが一致するため(タイル、壁、バスルーム)、最初に表示されるため、

      私は列に基づいて私のクエリに並べ替えを入れます。以下は私の弾性検索クエリです:

      { 
                "query" : { 
                 "filtered" : { 
                   "query" : { 
                    "query_string": { 
                     "query": "*tile wall bathroom*", 
                     "fields": [ 
                      "nickname", 
                      "comments", 
                      "category_name", 
                      "subcategory_name", 
                      "document_name", 
                      "web_links", 
                      "document_extension", 
                      "property_name", 
                      "document_content" 
                     ],              
                     "analyze_wildcard": true 
                    } 
                   }, 
                   "filter" : { 
                    "and" : [ 
                      {"term" : {"property_id" : "6"}} 
                    ] 
                   } 
                 } 
                }, 
                "size": 10, 
                "sort": ["nickname", "comments", "web_links", "document_name"] 
              } 
      

      参考のために参考にしてください。 enter image description here

      ありがとうございます!!!

  • 答えて

    1

    両方のドキュメントフィールドが "バスルーム"、 "タイル"、 "壁"で構成されているため、3つの用語すべてがヒットします。したがって、両方のドキュメントをヒットとして取得するのが一般的です。あなたが示唆しているように、一般に、スコアでソートされると、最初の文書は2番目の文書よりも高いランク付けされるべきです。

    あなたの最初のソートフィールドは、「ニックネーム」 - フィールドがあるので、あなたは、まずすべての文書は、その「ニックネーム」-fields(「浴室の壁タイル」のB来るにアルファベット順にソートされているこの結果セットを取得しますt "タイルウォールバスルーム"の前など)。 これは、検索要求の関連度スコアによる並べ替えを除外します。 2番目のソートパラメータとして「ニックネーム」を使用し、代わりに「_スコア」-fieldを使用することができます。

    また、Elasticsearch-explain機能を使用してクエリを確認することもできます。

    乾杯、ドミニク

    編集:あなたの結果が計算されているかを理解することができますElasticsearch- Explain-API、に対してクエリを実行してみてください。さらに、データに対してmatch-queryを実行して、結果が "query_string"の使用率を向上させるかどうかを確認することもできます。これにより、sort-parametersを省略して、関連性スコアだけで結果をランク付けすることもできます。

    { 
        "query": { 
         "match": { 
          "nickname": "tile wall bathroom" 
         }, 
         "size": 10, 
         "sort": ["_score", "nickname", "comments", "web_links", "document_name"] 
        } 
    } 
    
    +0

    ありがとうDominik。あなたは何を説明するのか質問してください。私は "_scrore"フィールドを最初に置こうとしましたが、同じ結果を表示します。 –

    +0

    Chocomesliありがとうございます。しかし、このクエリは全く機能していません。 –

    +0

    Explain-APIを試しましたか? – chocomuesli