3

カテゴリはフィールドの1つであり、SequentialIdという名前のフィールドがある弾性検索でインデックスされた1702個のドキュメントがあります。more_like_thisフィルタを使用したクエリ

私は最初に、以下のようにドキュメント1とドキュメント850の間にあるカテゴリ1.1のドキュメントを取り出しました。

**POST testucb/docs/_search 
{ 
    "size": 1702, 
    "query": { 
     "bool": { 
      "must": [ 
       {"match": { 
        "Category": "1.1" 
       }} 
      ], 
      "filter":[ 
       { 
        "range": 
        { 
         "SequentialId": 
         { 
          "gte":1, 
          "lte":850 

     } 
    } 
} 
] 
} 
} 
}** 

上記のクエリは私にカテゴリ1.1にマッチした834件の文書を与えた。(私は結果のJSON出力から834の_idsを解析するためのバイナリを持っている。) 私の目標は、今more_likeにこれらの834の_idsを提供することです私のテストセットである残りのドキュメントのトレーニングセットとしてのこのクエリ(sequentialid 851から1702までのドキュメントは私のテストセットです)

私はフィルタでこのmore_like_thisクエリを試しました。

POST /testucb/docs/_search 
{ 

"size": 1702, 
    "fields": [ 
      "SequentialId", 
      "Category", 
      "PRIMARY_CONTENT_EN" 
     ], 
    "query": { 
     "more_like_this": 
     { 
     "fields": [ 
      "PRIMARY_CONTENT_EN" 
     ], 
     "like":[ 
      <-----------834 _ids goes here ----> 
      ], 
      **"filter":[ 
       { 
        "range": 
        { 
         "SequentialId": 
         { 
          "gte":851, 
          "lte":1702** 

     } 
    } 
} 
], 
     "min_term_freq": 1, 
     "min_doc_freq": 1, 
     "max_query_terms": 15,    
     "min_word_len": 3, 

     "stop_words": [ 
        ], 
     "boost": 2, 
     "include":false 
} 
} 
} 

MLTがフィルタをサポートしていないというクエリ解析例外が発生します。 テストセットとして851から1702までのsequentialidを持つ残りのドキュメントをどのように提供できるかわかりません。

私が達成しようとしていることがはっきりしていることを願っています。あなたは私の仕事をどのように達成するのを手伝ってくれますか?私は弾性検索には新しいです。あなたは事前にもっとこのクエリやフィルタなどのやりたい場合は、elasticsearchの古いバージョンを使用している場合

答えて

6

は、あなたがbool query with filter clause(Elasticsearchversion> 2.0)

POST /testucb/docs/_search 
{ 
    "size": 1702, 
    "fields": [ 
    "SequentialId", 
    "Category", 
    "PRIMARY_CONTENT_EN" 
    ], 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "more_like_this": { 
      "fields": [ 
       "PRIMARY_CONTENT_EN" 
      ], 
      "like": [ 
       <-----------834 _ids goes here ----> 
      ], 
      "min_term_freq": 1, 
      "min_doc_freq": 1, 
      "max_query_terms": 15, 
      "min_word_len": 3, 
      "stop_words": [], 
      "boost": 2, 
      "include": false 
      } 
     } 
     ], 
     "filter": { 
     "range": { 
      "SequentialId": { 
      "gte": 851, 
      "lte": 1702 
      } 
     } 
     } 
    } 
    } 
} 

を使用する必要があり、あなたの代わりにfiltered queryを使用する必要があります

+1

は5.3でうまくいきます – perry