2016-03-30 185 views
3

我有1702文件索引在彈性搜索,其中有類別作爲其中一個領域,它也有一個名爲SequentialId字段。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。)現在 我的目標是提供這些834個_ids到more_like這個查詢作爲其餘文檔的訓練集,這是我的測試集(來自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的順序號作爲我的測試集剩餘的文件。

我希望能夠清楚我所期望的成就。您們可以幫我解決我的任務嗎?我是新的彈性搜索。

回答

6

如果你想要做一個更喜歡這樣的查詢和過濾事先,你應該如果你使用elasticsearch的舊版本使用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