【问题标题】:mapping for Elasticsearch percolatorElasticsearch 过滤器的映射
【发布时间】:2014-07-23 08:31:45
【问题描述】:

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

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

假设我将渗透的文档包含包含下划线的“名称”字段

类似

{
name : "null_value"
}

并假设存储在 percolator 中的查询是这样的

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

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

但我希望 percolator 检查该字段是否具有即将到来的文档的确切值。

所以如果 name:"null_value" 那么它不应该匹配但是 name:"null" 那么它应该匹配。

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果您想获得精确的标记匹配语义,您需要为“名称”字段选择合适的分析器。如果您没有指定映射,您将获得默认分析器。相反,您应该使用 not_analyzed。

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

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

    最好的问候

    【讨论】:

    • 映射应该在索引时提供还是在索引创建时提供?似乎在渗透过程中,每个文档的映射都是自动生成的。那么我必须为每个渗透请求提供正确的映射吗?
    • 在大多数情况下,最好在创建索引时指定映射。当您渗透时,您指定派生映射的类型/索引。
    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 2016-10-30
    • 2019-05-19
    • 1970-01-01
    • 2011-05-11
    • 2019-01-30
    • 2011-04-10
    • 2021-12-05
    相关资源
    最近更新 更多