elasticsearch过滤器过滤器失败

时间:2016-10-05 14:51:08

标签: elasticsearch

我正在使用一个工作正常的过滤器的文档查询。当我尝试使用查询ID过滤percolator查询哪个文档渗透时,它不会返回任何结果。例如:

{
  "doc" : {
   "text" : "This is the text within my document"
  },
  "highlight" : {
   "order" : "score",
   "pre_tags" : ["<example>"],
   "post_tags" : ["</example>"],
   "fields" : {
   "text" : { "number_of_fragments" : 0 }
  }
 },
 "filter":{"ids":{"values":[11,15]}}
,
 "size" : 100
}

我确信这些ID是正确的,但总是获得"matches" : [ ]。当我不使用过滤器时,ES会检索正确的匹配项。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我想我已经解决了。它似乎是the filter only works on the "metadata" fields,这意味着您必须将自定义字段添加到过滤器中索引的查询中,以便在需要时使用它们进行过滤。 使用我之前的示例,我必须在诸如以下的过滤器查询中编制索引:

{
    "query" : {
      "match_phrase" : {
        "text" : "document"
      }
    },
    "id" : 11
  }

手动添加&#34;&#34;冗余 id 字段,以便稍后将其用作过滤器参考。 在渗透时,你必须使用类似的东西:

{
  "doc" : {
   "text" : "This is the text within my document"
  },
 "filter":{"match":{"id":11}},
  "highlight" : {
   "order" : "score",
   "pre_tags" : ["<example>"],
   "post_tags" : ["</example>"],
   "fields" : {
   "text" : { "number_of_fragments" : 0 }
  }
 },
 "size" : 100
}

仅使用该过滤器查询。可以找到补充信息here