Elasticsearch过滤器的映射

时间:2014-06-03 05:37:17

标签: elasticsearch

默认情况下,我的过滤器映射如下所示

{
  "indexName" : {
    "mappings" : {
      ".percolator" : {
        "_id" : {
      "index" : "not_analyzed"
    },
    "properties" : {
      "query" : {
        "type" : "object",
        "enabled" : false
      }
    }
  }
}

假设我将要渗透的文件包含' name'包含下划线的字段

类似

{
name : "null_value"
}

并假设存储在过滤器中的查询类似于

{
"query":
    {"query_string":
        {"query":"name:\"null\"","defaultOperator":"AND"}
}

percolator返回此查询,表示此文档与此查询匹配。

但我希望过滤器检查该字段是否具有即将到来的文件的确切值。

所以如果名字:" null_value"然后它不应该匹配,但名称:" null"那么它应该匹配。

在这种情况下,我是否必须将映射属性放入过滤器?或者我必须使用不同的查询?

1 个答案:

答案 0 :(得分:1)

如果你想拥有精确的令牌匹配语义,你需要为" name"选择合适的分析器。领域。如果您没有指定映射,则会获得默认分析器。相反,你应该使用not_analyzed。

然后在搜索方面,您会想要使用术语查询。 query_string有问题,因为它在通过文本分析管道之前传递给查询解析器。

注意,上述方法区分大小写。如果要忽略大小写,请使用关键字标记生成器和小写标记过滤器创建自定义分析器。然后在查询端使用术语查询,但事先使用小写,因为不分析术语查询。

最好的问候