2016-03-30 223 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