【问题标题】:More_like_this query with a filterMore_like_this 带有过滤器的查询
【发布时间】:2016-07-17 21:52:02
【问题描述】:

我在弹性搜索中索引了 1702 个文档,其中类别作为字段之一,它还有一个名为 SequentialId 的字段。

我最初获取了类别 1.1 的文档,它们位于文档 1 和文档 850 之间,如下所示。

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

        }
    }
}
]
}
}
}**

上面的查询给了我 834 个匹配类别 1.1 的文档。(我有二进制文件可以从结果 JSON 输出中解析出 834 个 _id。) 我现在的目标是将这 834 个 _id 提供到 more_like 这个查询中,作为我的测试集剩余文档的训练集(我的测试集从序列 ID 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 的序列 ID 的其余文档作为我的测试集。

我希望清楚我期望完成什么。你们能帮我完成我的任务吗?我是弹性搜索的新手。

【问题讨论】:

    标签: elasticsearch elasticsearch-plugin elastic-map-reduce


    【解决方案1】:

    如果你想事先做一个更像这样的查询和过滤,你应该使用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
              }
            }
          }
        }
      }
    }
    

    如果您使用旧版本的 elasticsearch,则应改用 filtered query

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 2019-08-15
      相关资源
      最近更新 更多